无法使我的正则表达式匹配

时间:2012-11-26 06:46:07

标签: javascript regex

我在javascript中使用正则表达式时遇到了一些麻烦。 我有以下代码,我认为应该匹配,但事实并非如此。

var rgx = new RegExp("{\d+:(\d+)}");

if (rgx.test("{0:00000}") == true) {
    alert("match");
}
else
{
    alert("no match");
}

我不确定我是否应该在这里使用test()。我真的想抓住这个组,在我的正则表达式中,但exec()似乎给了我相同的结果。

那么我做错了什么?

2 个答案:

答案 0 :(得分:5)

问题是您需要转义正则表达式中的\字符:

var rgx = new RegExp("{\\d+:(\\d+)}");

或者,您可以使用文字语法:

var rgx = /{\d+:(\d+)}/;

要捕获结果,您还应该使用.match函数而不是test或exec。如果匹配则返回null,如果匹配,则返回至少一个元素的数组。

答案 1 :(得分:0)

正则表达式存在多个问题:

var rgx = new RegExp("{\d+:(\d+)}");

首先(syazdani首先注意到),你必须对反斜杠进行字符串转义:

var rgx = new RegExp("{\\d+:(\\d+)}");

或更好地使用正则表达式文字:

var rgx = /{\d+:(\d+)}/

其次,{}在正则表达式中具有特殊含义,应该进行转义:

var rgx = /\{\d+:(\d+)\}/

第三,正如Ian所指出的,您可能希望确保整个字符串匹配:

var rgx = /^\{\d+:(\d+)\}$/

无论字符串是否匹配,

RegExp#test都返回布尔值true / false。

RegExp#exec返回一个包含匹配项的数组,如果字符串匹配则返回所有捕获的组,如果字符串不匹配则返回null

var matches = /\{\d+:(\d+)\}/.exec("{0:000000}");
if(matches){
  console.log(matches[1]); //logs "000000"
}