Javascript正则表达式提取数字

时间:2015-06-14 16:25:44

标签: javascript regex string

我有

之类的字符串
(123)abc
defg(456)
hijkl
(999)
7

我希望一次一个地将这些字符串与正则表达式匹配,以从字符串开头的字符串中提取任何数字'('中间有一个数字,然后是' ;)'后跟零个或多个字符。所以,在上面的5个例子中,我在第一种情况下匹配123,在第二种情况和第三种情况下都没有,在第四种情况下是999,在第五种情况下没有任何东西。

我试过这个

var regex = new RegExp("^\((\d+)\)", "gm");
var matches = str.match(regex);

但是匹配总是为空。我做错了什么?

我在regex101尝试了这个正则表达式,它似乎有用,所以我不知道为什么代码不起作用。

3 个答案:

答案 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

RegEx Demo

使用正则表达式构造函数(注意双重转义):

var regex = new RegExp("^\\((\\d+)(?=\\))", "gm");