javascript - 创建包含正则表达式匹配中所有组的数组的有效解决方案

标签 javascript regex

我正在寻找一种有效的方法来创建包含所有匹配项的数组,其中包含正则表达式组匹配项。

例如正则表达式 /(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/

相关文章:

javascript - Bootstrap 导航栏下拉列表隐藏在 html 选择选项后面

javascript - 使用javascript计算日期范围时动态更改年份

正则表达式匹配空格和撇号

php - 常量和 mysql,最佳实践

python - 在 Python 中,如何列出与 POSIX 扩展正则表达式 `[:space:]` 匹配的所有字符?

regex - 使用 Powershell 替换正则表达式结果的小节

javascript - 创建带有子数组的数组的函数

javascript - window.alert() 在打包的应用程序中不可用

java - pig : Regular Expression syntax

用于验证表单和显示 css 加载屏幕的 Javascript 函数