我在javascript中使用正则表达式时遇到了一些麻烦。 我有以下代码,我认为应该匹配,但事实并非如此。
var rgx = new RegExp("{\d+:(\d+)}");
if (rgx.test("{0:00000}") == true) {
alert("match");
}
else
{
alert("no match");
}
我不确定我是否应该在这里使用test()。我真的想抓住这个组,在我的正则表达式中,但exec()似乎给了我相同的结果。
那么我做错了什么?
答案 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"
}