什么是“;无需重复“;在javascript中使用正则表达式时的错误平均值
What does the "Nothing to repeat" error mean when using a regex in javascript?
我是Regex的新手,我正试图将其融入我的一个新项目中,看看我是否能学会它,并将其添加到我的技能代表中。然而,我遇到了一个障碍。
我正试图通过使用.search
函数来查看用户的输入中是否包含非法字符,如下所示:
if (name.search("['[']'?'*'+'|'{'}'''(')'@'.'n'r]") != -1) {
...
}
然而,当我尝试执行包含此行的函数时,它会为该特定行抛出以下错误:
Uncaught SyntaxError: Invalid regular expression: /[[]?*+|{}'()@.
]/: Nothing to repeat
我一辈子都看不出我的代码出了什么问题。有人能给我指正确的方向吗?
您需要将用于转义正则表达式特殊字符的反斜杠加倍。然而,正如@Bohemian所指出的,大多数反斜杠都不需要。不幸的是,他的答案和你的问题一样。你真正想要的是:
反斜杠由读取字符串的代码进行解释,而不是传递给正则表达式解析器。您想要:
"[''['']?*+|{}''''()@.'n'r]"
注意四个反斜杠。这是绝对需要的。传递给正则表达式编译器的字符串与@Bohemian的字符串相同,并且工作正常。
在@Bohemian的基础上,我认为最简单的方法是只使用正则表达式,例如:
if (name.search(/['[']?*+|{}''()@.'n'r]/) != -1) {
// ... stuff ...
}
Regex文字很好,因为您不必转义转义符,而且一些IDE会突出显示无效的Regex(对我很有帮助,因为我经常把它们搞砸)。
对于谷歌旅行者来说:当你拼写错误并将+
正则表达式运算符加倍时,也会出现这个愚蠢而无益的错误消息:
好的:
'w+
不好:
'w++
如果正则表达式以?
开头,也可能发生这种情况。
?
可以起到量词的作用——因此?
可能期望在它之前出现其他东西;无需重复";错误正则表达式字符串中没有任何内容在它之前,因此它无法量化任何内容;没有什么可重复的/没有什么可量化的。
?
还有另一个作用——如果?
前面有(
,它可能指示环视断言或其他特殊构造的开始。请参阅下面的示例。
如果忘记在以下查找断言?<=x
周围写()
括号,这将导致OP的错误:
不正确:const xThenFive = /?<=x5/;
正确:const xThenFive = /(?<=x)5/;
这个/(?<=x)5/
是一个积极的后备:我们正在寻找一个前面有x
的5,例如它将匹配x563
中的5
,但不匹配x652
中的5
。
好吧,在我的情况下,我不得不在regex的帮助下测试一个电话号码,但我得到了同样的错误,
Invalid regular expression: /+923[0-9]{2}-(?!1234567)(?!1111111)(?!7654321)[0-9]{7}/: Nothing to repeat'
所以,在我的例子中,错误是正则表达式开头的/
后面的+
运算符。因此,用方括号[+]
包围+
运算符,然后再次发送请求,就像一个符咒。
以下将起作用:
/[+]923[0-9]{2}-(?!1234567)(?!1111111)(?!7654321)[0-9]{7}/
这个答案可能对那些得到相同类型错误的人有帮助,但从这个角度来看,他们得到错误的机会和我的一样!干杯:)
首先,在字符类[...]
中,大多数字符不需要转义,它们只是文字。
因此,您的正则表达式应该是:
"['[']?*+|{}''()@.'n'r]"
这是为我编译的。
例如,当我试图为不以/internal
开头的路径创建路由时,在express node.js中遇到了这个问题
app.get(`'/(?!internal).*`, (req, res)=>{
经过长时间的尝试,当使用new RegExp()
将其作为RegExp对象传递时,它才起作用
app.get(new RegExp("'/(?!internal).*"), (req, res)=>{
如果您在路由时遇到这个常见问题,这可能会有所帮助
- 正则表达式给出错误的输出
- 正则表达式中的错误
- javascript使用正则表达式得到错误的结果
- 在正则表达式中添加 (?i) 会导致 javascript 中出现错误“无效的正则表达式组”
- Javascript错误正则表达式不是函数
- Javascript 正则表达式不会在应该给出错误消息时给出错误消息
- 即使验证正则表达式错误,也提交表单
- Nodejs 正则表达式错误:“无效的正则表达式:没有什么可重复的”
- 正则表达式错误
- 正则表达式错误javascript
- 测试邮政编码时出现Javascript正则表达式错误
- javascript正则表达式错误
- Netbeans中的正则表达式错误在其他编辑器中不存在
- Visual studio 12和正则表达式错误
- Javascript正则表达式错误,两个字符之间的文本
- jquery中的正则表达式错误
- 需要帮助修复JavaScript正则表达式错误
- javascript中的正则表达式错误
- 如何在符号(和)上编写正则表达式错误
- 启动日期选择器changeDate正则表达式错误