奇怪的JavaScript正则表达式行为

时间:2010-06-14 04:12:04

标签: javascript regex

我在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,如果这样做有帮助。

2 个答案:

答案 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');

适合我。