【发布时间】:2017-10-12 11:37:45
【问题描述】:
我有这段代码搜索用户输入,然后突出显示所有大写文本。我使用 RegExp 和 splice 进行替换,但我似乎无法弄清楚如何在屏幕上显示结果,只能在控制台中。
var allCaps = new RegExp(/(?:[A-Z]{3,30})/g);
var capsArray = [];
var capsFound;
var capitalErrorsList = '';
while (capsFound = allCaps.exec(searchInput)) {
capsArray.push(capsFound[0]);
}
if(capsArray.length > 0){
resultsLog.innerHTML += "<p><span class='warning'>Is this an abbreviation? If yes, ensure you have the full version included after its first use.</span></p>";
for(var five = 0; five < capsArray.length; five++) {
//display associated text
capitalErrorsList += '<li>' + capsArray[five] + '</li>';
capsArray.splice(0, 1, '<span style="background-color: yellow;">'+capsArray[five]+'</span>');
console.log(capsArray);
}
resultsLog.innerHTML += '<ul>' + capitalErrorsList + '</ul>';
}
else {
resultsLog.innerHTML += "";
}
添加这段代码是我得到的壁橱,但它给出了一些非常奇怪的结果。
searchInput = document.getElementById('findAllErrors').innerHTML;
searchInput = searchInput.replace(capsArray[five], function(){
return capsArray.splice(0, 1, '<span style="background-color: yellow;">'+capsArray[five]+'</span>');
});
【问题讨论】:
-
在您的小提琴中,您将
searchInput(正则表达式在其上执行)设置为document.getElementById('searchInput'),这是一个节点,而不是字符串。尝试将var searchInput = ...行更改为var searchInput = document.getElementById('searchInput').innerText,看看是否更成功。 -
另外,您可以使用
map()来整理最后的循环。如果这就是你想要做的,请告诉我,我会一起回答。 -
谢谢本。文本区域中有未知数量的大写字母(例如,这只是一个测试)。对于每个 THIS,ONLY,TEST 应该添加到数组中,循环遍历数组,并且每个大写字母都添加了一个带有黄色突出显示的跨度,以询问为什么要大写。我可以找到大写的单词,但无法将结果返回到文本区域。
-
我认为我的答案应该可以解决问题。
标签: javascript arrays splice