JS数组查找和替换?

时间:2017-09-18 15:01:44

标签: javascript arrays

我正在进行正则表达式搜索文档中的所有大写字母。它收集它们并将它们放入一个阵列没问题。

我遇到的问题是我想替换该数组中的项目,以包含在数组中捕获的每个项目周围的范围,然后显示更新的结果。我尝试过各种各样的事情。

我完全失败了。任何帮助表示赞赏。这是我的最后一次尝试

var allCaps = new RegExp(/(?:[A-Z]{2,30})/g);
    var capsArray = [];
    var capsFound;

    while (capsFound = allCaps.exec(searchInput)) {
        capsArray.push(capsFound[0]);
    }


    //for(var x = 0; x < capsArray.length; x++){

            //var test = ;
            capsArray.splice(0, '<span style="color:green">'+ capsArray +'</span>');

    //}
}

3 个答案:

答案 0 :(得分:5)

您无法使用splice转换整个数组的元素 - 您可以使用.map代替:

capsArray = capsArray.map(c => '<span style="color:green">' + c + '</span>');

答案 1 :(得分:1)

您是否需要数组中的结果?如果没有,您可以使用修改后的正则表达式将所有大写字母包装在str中:

str.replace(/([A-Z])/g, '<span>$1</span>')

示例:

'A--B--C'变为'<span>A</span>---<span>B</span>---<span>C</span>'

如果出于某种原因需要数组:

str.split(/[^A-Z]+/g).map(x => `<span>${x}</span>`)

示例:

'A--B--C'变为['<span>A</span>', '<span>B</span>', '<span>C</span>']

答案 2 :(得分:0)

感谢大家的帮助。

对于在途中迷路的其他人来说,这是我的最终解决方案

var allCaps = new RegExp(/(?:[A-Z]{2,30})/g);
var capsArray = [];
var capsFound;

while (capsFound = allCaps.exec(searchInput)) {
    capsArray.push(capsFound[0]);
}

if(capsArray.length > 0){
    resultsLog.innerHTML += "<br><span class='warning'>So many capitals</span><br>";
    searchInput = document.getElementById('findAllErrors').innerHTML;
    searchInput = searchInput.replace(/([A-Z]{3,30})/g, '<span style="background-color:green">$1</span>');
    document.getElementById('findAllErrors').innerHTML = searchInput;
}
else {
    resultsLog.innerHTML += "";
}