0

当有括号的值时,我正在尝试匹配。

var onsuccess = "aaa;bbb(ccc)";
onsuccess.split(';').forEach(function (success) {
                var re = new RegExp("\(.*?\)");
                document.write(success + ": " + success.match(re) + "<br>");
        });​

输出是

aaa: ,
bbb(ccc): ,

预期是

aaa: false
bbb(ccc): true

我哪里错了?我一直以这个页面为例: http ://www.regular-expressions.info/javascriptexample.html

这是我的小提琴:http: //jsfiddle.net/valamas/8B5zw/

谢谢

4

4 回答 4

3
var onsuccess = "aaa;bbb(ccc)";
onsuccess.split(';').forEach(function (success) {
   var re = /\(.*?\)/;
   document.write(success + ": " + re.test(success) + "<br>");
});

工作演示。

注意:如果使用new RegExp(...),则需要转义反斜杠。

您的正则表达式应该是var re = new RegExp("\\(.*?\\)");,但由于您的正则表达式中没有变量,您应该只使用正则表达式文字。​</p>

于 2012-09-27T01:55:42.003 回答
2

.match()返回匹配组的数组。

您正在考虑.test(),它返回真或假。

此外,您\的 s 正被 Javascript 字符串文字所吞噬。
您应该改用正则表达式文字。

于 2012-09-27T01:47:18.007 回答
1

这缺少一个要匹配的组,以及一个布尔值:

var onsuccess = "aaa;bbb(ccc)";
onsuccess.split(';').forEach(function (success) {
                //var re = new RegExp("(\(.*?\))");
                var re = /.*(\(.*?\)).*/;
                document.write(success + ": " + !!success.match(re) + "<br>");
        });​
于 2012-09-27T01:50:19.210 回答
1

使用 .test 而不是强制转换

var onsuccess = "aaa;bbb(ccc)";
var rxParens = /.*(\(.*?\)).*/;

onsuccess.split(";").forEach(function(success) {
    document.write(success + ': ' + rxParens.test(success) + '<br>' );
});

aaa: false
bbb(ccc): true

顺便说一句,.test 的执行速度比 .match 快很多倍http://jsperf.com/exec-vs-match-vs-test/5

于 2012-09-27T02:06:26.463 回答