否定随机正则表达式

Negate random regular expression

本文关键字:正则表达式 随机      更新时间:2023-09-26

是否有一种方法来否定任何正则表达式?我使用正则表达式来验证表单上的输入。我现在尝试创建一个按钮来对输入进行消毒。是否有一种方法可以让我使用用于验证的正则表达式,也用于剥离无效字符?

我使用这个正则表达式来验证非法字符

<input data-val-regex-pattern="[^|<>:'?''*'[']'=%'$'+,;~&'{'}]*" type="text" />

当点击旁边的按钮时,我调用这个函数:

$('#button').click(function () {
    var inputElement = $(this).prev();
    var regex = new RegExp(inputElement.attr('data-val-regex-pattern'), 'g');
    var value = inputElement.val();
    inputElement.val(value.replace(regex, ''));
});

目前javascript正在做什么我想要完成的完全相反。我需要找到一种方法来"反转"正则表达式。

编辑:我试图在javascript函数中反转正则表达式。data-val-regex-pattern -属性中的正则表达式正在执行验证工作。

要找到无效字符,只需从正则表达式中取出^

data-val-regex-pattern="[|<>:'?''*'[']'=%'$'+,;~&'{'}]*"

这将返回不需要的字符,以便您可以替换它们。

另外,如果您想去掉很多非单词字符,您可以尝试使用更简单的正则表达式。如果只需要单词字符和空格,可以使用如下命令:

data-val-regex-pattern="['W'S]*"

您的权限如下:

[^|<>:'?''*'[']'=%'$'+,;~&'{'}]*

这意味着,它匹配任何非无效字符多次。

然后将这个替换为empty,这样就只留下不好的字符。

试试这个,不要否定(移动到其他地方):

[|^<>:'?''*'[']'=%'$'+,;~&'{'}]*

下面的答案是对正则表达式求反的一般问题的回答。在您的特定情况下,您只需要否定一个字符组,或者更准确地说,删除一个字符组的否定-这在其他答案中有详细说明。

正则语言——那些完全由匹配的正则组成的字符串——实际上在否定下关闭:另一个正则,它完全匹配原始正则不匹配的字符串。然而,构造它并不容易,这也许解释了为什么RE实现通常不提供反运算符。

然而,Javascript的regexp语言有扩展,使其比常规语言更具表现力;特别地,有一个负向展望的构造。

如果R1是regexp则

^(?!.*(R1))

精确匹配不包含R1匹配的字符串。

^(?!R1$)

精确匹配不匹配R1的字符串。

Ie。否定。

对于重写任何不匹配给定regexp的子字符串,以上是不够的。比如

((?!R1).)*

将捕获任何不包含与R1匹配的子字符串的子字符串。-但考虑到边缘情况,这并不完全符合我们的要求。例如,((?!ab).)*匹配"ab"中的"b",因为"ab"不是"b"的子字符串。

可以作弊,使你的regexp像;

(.*)(R1|$)
并重写为T1$2

其中T1是要重写为的目标字符串。

这将重写字符串中不匹配R1T1的部分。但是我会非常小心任何边缘情况。因此,从头编写regexp可能比尝试通用方法更好。