祝贺所有你可以正常使用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'也被捕获了?我只是无法理解。我尝试了很多没有成功的组合。有什么想法吗?
再见!
答案 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 强>