如何使用正则表达式Javascript捕获组?

时间:2017-09-30 19:55:59

标签: javascript regex

祝贺所有你可以正常使用JS的Jedi,遗憾的是我不能。

我想迭代相应字符串'm10 m20 m30 xm40'的所有匹配项,xm40除外,并提取数字10,20,30:

'  m10 m20 m30 xm40'.match(/\s+m(\d+)/g)

但这是我在chrome console中得到的:

'  m10 m20 m30 xm40'.match(/\s+m(\d+)/g)
(3) ["  m10", " m20", " m30"]

为什么'm'也被捕获了?我只是无法理解。我尝试了很多没有成功的组合。有什么想法吗?

再见!

2 个答案:

答案 0 :(得分:2)

使用RegExp.exec()功能:

const regex = /\sm(\d+)/g;
const str = '  m10 m20 m30 xm40';
let result = [];

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }        
    result.push(+m[1]);
}

console.log(result);

答案 1 :(得分:1)

获取这些数字的另一种方法是首先匹配/\sm\d+/g,然后返回映射结果并提取数字。

var m = str.match(/\sm\d+/g).map(el => el.match(/\d+/)[0]);

<强> DEMO