我有
之类的字符串(123)abc
defg(456)
hijkl
(999)
7
我希望一次一个地将这些字符串与正则表达式匹配,以从字符串开头的字符串中提取任何数字'('中间有一个数字,然后是' ;)'后跟零个或多个字符。所以,在上面的5个例子中,我在第一种情况下匹配123,在第二种情况和第三种情况下都没有,在第四种情况下是999,在第五种情况下没有任何东西。
我试过这个
var regex = new RegExp("^\((\d+)\)", "gm");
var matches = str.match(regex);
但是匹配总是为空。我做错了什么?
我在regex101尝试了这个正则表达式,它似乎有用,所以我不知道为什么代码不起作用。
答案 0 :(得分:3)
我认为你的正则表达式没有任何问题,请尝试使用regex101生成的代码:
var re = /^\((\d+)\)/gm;
var str = '(123)abc\ndefg(456)\nhijkl\n(999)\n7';
var m;
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}
<强> Working demo 强>
顺便说一句,正如 jonathan lonowski 在他的评论中指出的那样,当你使用RegExp时你必须逃避反斜杠:
new RegExp("^\\((\\d+)\\)", "gm")
答案 1 :(得分:3)
您需要将捕获组的结果推送到数组,为此使用exec()
方法。
var str = '(123)abc\ndefg(456)\nhijkl\n(999)\n7'
var re = /^\((\d+)\)/gm,
matches = [];
while (m = re.exec(str)) {
matches.push(m[1]);
}
console.log(matches) //=> [ '123', '999' ]
答案 2 :(得分:2)
您可以使用此正则表达式:
var regex = /^\((\d+)(?=\))/gm;
并使用捕获的组#1
使用正则表达式构造函数(注意双重转义):
var regex = new RegExp("^\\((\\d+)(?=\\))", "gm");