我对我应该用来检测".-", "-."
的RegExp感到困惑,它确实将这些组合传递为有效但同时"-_","_-"
也得到了验证。我错过了什么或者没有正确地逃避某些事情吗?
var reg=new RegExp("(\.\-)|(\-\.)");
实际上似乎任何包含'-'
的组合都会被传递。它
谢谢大家。
答案 0 :(得分:2)
您需要使用
"(\\.-)|(-\\.)"
答案 1 :(得分:1)
由于您使用的是带有RegExp构造函数而不是/
的字符串,因此需要转义两次。
>>> "asd_-ads".search("(\.\-)|(\-\.)")
3
>>> "asd_-ads".search(/(\.\-)|(\-\.)/)
-1
>>> "asd_-ads".search(new RegExp('(\\.\-)|(\-\\.)'))
-1
答案 2 :(得分:1)
在符号/(\.\-)|(\-\.)/
中,表达式是正确的。
在您选择的符号中,您必须将所有反斜杠加倍,因为它仍然具有自身的特殊含义,例如\\
,\n
等。
请注意,此处无需转义破折号:var reg = new RegExp("(\\.-)|(-\\.)");
如果您不需要区分匹配项,则可以使用单个封闭式捕获,如果只想检查匹配项,则可以不使用; "\\.-|-\\."
仍然有效。
答案 3 :(得分:0)
您正在使用双引号,因此.
不会使用一个反斜杠进行转义,请使用以下表示法:
var reg = /(\.\-)|(\-\.)/;