Javascript + Regex =没有重复错误?

esq*_*qew 63 javascript regex match

我是Regex的新手,我正在尝试将其用于我的一个新项目,看看我是否可以学习它并将其添加到我的技能复制中.但是,我在这里遇到了障碍.

我正在尝试通过使用该.search函数来查看用户的输入是否包含非法字符:

if (name.search("[\[\]\?\*\+\|\{\}\\\(\)\@\.\n\r]") != -1) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试执行该行包含它时,它会为该特定行抛出以下错误:

Uncaught SyntaxError: Invalid regular expression: /[[]?*+|{}\()@.

]/: Nothing to repeat
Run Code Online (Sandbox Code Playgroud)

我不能为我的生活看到我的代码有什么问题.谁能指出我正确的方向?

and*_*ski 86

您需要加倍用于转义正则表达式特殊字符的反斜杠.然而,正如@Bohemian指出的那样,大多数反斜杠都不需要.不幸的是,他的答案与你的问题一样.你真正想要的是:

反斜杠由读取字符串的代码解释,而不是传递给正则表达式解析器.你要:

"[\\[\\]?*+|{}\\\\()@.\n\r]"
Run Code Online (Sandbox Code Playgroud)

注意四倍的反斜杠.这绝对需要.传递给正则表达式编译器的字符串与@ Bohemian的字符串相同,并且正常工作.

  • 顺便说一句,只有一些langs需要四倍\; 例如java yes,perl not (3认同)

Nob*_*Man 8

建立@Bohemian,我认为最简单的方法是使用正则表达式文字,例如:

if (name.search(/[\[\]?*+|{}\\()@.\n\r]/) != -1) {
    // ... stuff ...
}
Run Code Online (Sandbox Code Playgroud)

正则表达式文字是很好的,因为你不必转义转义字符,并且一些IDE将突出显示无效的正则表达式(对我来说非常有用,因为我经常搞砸它们).


Tom*_*uer 8

对于 Google 旅行者:当您输入错误并将正则表达式运算符加倍时,也会出现此愚蠢且无用的错误消息+

好的:

\w+
Run Code Online (Sandbox Code Playgroud)

不行:

\w++
Run Code Online (Sandbox Code Playgroud)

  • 实际上是“+”和“*”字符的任意组合。 (4认同)