我正在尝试匹配带括号的值。
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/
感谢
答案 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)
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
快许多倍