我正在寻找一种有效的方法来创建包含所有匹配项的数组,其中包含正则表达式组匹配项。
例如正则表达式 /(1)(2)(3)/g
字符串 123
预期结果 ['1','2','3']
我当前的代码如下所示:
var matches = [];
value.replace(fPattern, function (a, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15) {
for(var i = 1, v; i < 15; i++){
v = eval('s' + i);
if(v){
matches.push(v);
}else{
break;
}
}
});
它有效,但我不喜欢它的工作方式。
第一件事是,我实际上不知道我的正则表达式变量 fPattern
中有多少组,所以我需要定义很多不必要的变量 s1, s2 ...等等
。
第二个问题是我决定使用邪恶的eval
来防止将这些变量“手动”一一插入数组,也许有更好的解决方案?
还有一件事 - 我确实尝试使用 match()
但不幸的是,当我有模式 /(1)(2)(3)/g
时,它会返回我数组 ['123']
所以这不是我想要实现的。
谢谢!
编辑
好吧,我发现了一些看起来更好的东西
matches = fPattern.exec(value);
if(matches && matches.length){
for(var key in matches){
if(key !== '0'){
if(key !== 'index'){
formated += matches[key] + ' ';
}else{
break;
}
}
};
}
最佳答案
类似的东西
arrays = "123".match(/(1)(2)(3)/);
arrays.splice(0,1);
console.log(arrays);
=> Array [ "1", "2", "3" ]
match
返回一个数组,其中数组索引 0
将包含整个匹配项。从数组索引 1
开始,它将包含相应捕获组的值。
arrays.splice(0,1);
将从数组中删除索引0
元素,即整个匹配,结果数组将仅包含捕获组值
关于javascript - 创建包含正则表达式匹配中所有组的数组的有效解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27865682/