0

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

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

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

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

那么我做错了什么?

4

2 回答 2

5

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

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

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

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

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

于 2012-11-26T06:49:49.813 回答
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"
}
于 2012-11-26T06:57:09.460 回答