我在JavaScript中使用正则表达式会得到不同的行为,具体取决于我是否使用文字语法声明它。使用极其简单的测试HTML文件:
<html>
<head>
<script type="text/javascript">
var s = '3';
var regex1 = /\d/;
var regex2 = new RegExp('\d');
alert(s.search(regex1)); // 0 (matches)
alert(s.search(regex2)); // -1 (does not match)
</script>
</head>
<body></body>
</html>
使用文字语法(/\d/
)声明的正则表达式可以正常工作,而另一个(new RegExp('\d')
)则不能。为什么发生这种情况呢?
我在Windows Vista家庭高级版上使用谷歌浏览器5.0.375.70,如果这样做有帮助。
答案 0 :(得分:2)
如果使用字符串,\d
是一个特殊字符。你需要逃避反斜杠:
var regex2 = new RegExp('\\d');
请参阅String Literals:
转义字符
对于表中未列出的字符 2.1,忽略前面的反斜杠,但不推荐使用此用法 应该避免。
所以基本上'\d
'被视为'd'
,这就是它不匹配的原因。例如:
alert('d'.search(new RegExp('\d'))); // 0 (matches!)
答案 1 :(得分:0)
var regex2 = new RegExp('\\d');
适合我。