正则表达式匹配不返回true或false

时间:2012-09-27 01:45:58

标签: javascript regex

我正在尝试匹配带括号的值。

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 个答案:

答案 0 :(得分:3)

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

The working demo.

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

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

答案 1 :(得分:2)

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

您正在考虑.test(),它会返回true或false。

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

答案 2 :(得分:1)

这是缺少要匹配的组,以及强制转换为布尔值:

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

答案 3 :(得分: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

快许多倍