我正在进行正则表达式搜索文档中的所有大写字母。它收集它们并将它们放入一个阵列没问题。
我遇到的问题是我想替换该数组中的项目,以包含在数组中捕获的每个项目周围的范围,然后显示更新的结果。我尝试过各种各样的事情。
我完全失败了。任何帮助表示赞赏。这是我的最后一次尝试
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>');
//}
}
答案 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 += "";
}