Javascript 将可能以特殊字符开头或结尾且具有通用前缀的搜索短语包装为仅带有SPAN标记的整词
我有这段代码来突出显示数组中存在的单词,除了没有突出显示包含“.”的单词外,一切正常Javascript 将可能以特殊字符开头或结尾且具有通用前缀的搜索短语包装为仅带有SPAN标记的整词,javascript,regex,Javascript,Regex,我有这段代码来突出显示数组中存在的单词,除了没有突出显示包含“.”的单词外,一切正常 spansR[i].innerHTML = t[i].replace(new RegExp(wordsArray.join("|"),'gi'), function(c) { return '<span style="color:red">'+c+'</span>'; }); spansR[i].innerHTML=t[i].re
spansR[i].innerHTML = t[i].replace(new RegExp(wordsArray.join("|"),'gi'), function(c) {
return '<span style="color:red">'+c+'</span>';
});
spansR[i].innerHTML=t[i].replace(新RegExp(wordsArray.join(“|”)函数(c){
返回“+c+”;
});
我还试着在每个单词中避开圆点
for(var r=0;r<wordsArray.length;r++){
if(wordsArray[r].includes('.')){
wordsArray[r] = wordsArray[r].replace(".", "\\.");
wordsArray[r] = '\\b'+wordsArray[r]+'\\b';
}
}
for(var r=0;r以下是您的解决方案:
替换此项:
new RegExp(wordsArray.join("|"),'gi')
为此:
new RegExp(wordsArray.join("|"),'gi').replace(/\./g,'\\.')
例如:
['javascript', 'firas.', 'regexp'].join("|").replace(/\./g,'\\.')
将打印
javascript|firas\.|regexp
这是您正在寻找的带有转义点的正则表达式。它将匹配firas.
,但不会匹配firas
,正如您在上一条评论中特别要求的那样在JavaScript中实现一个明确的单词边界
以下是不支持ECMAScript 2018及更新版本的JS版本:
var t=“一些文本…firas和firas。但不是firas…还有一些购物而不是购物”;
var wordsArray=['firas','firas.','shop'];
排序(函数(a,b){
返回b.length-a.length;
});
var regex=new RegExp(“(^ |\\W)(“+wordsArray.map(函数(x)){
返回x.replace(/[-\/\^$*+.()\[\]{}]/g,'\\$&'))
}).join(“|”)+”(!\\w)”,“gi”);
console.log(t.replace(regex,$1$2'));
请提供一个测试用例来重新处理这个问题。顺便说一句,t[i].replace(new RegExp(wordsArray.join(“|”)join(“|”)gi'),function(c){return“”+c+”;
应该重新编写为t[i]。replace(new RegExp
WiktorStribiżew:是的,没有函数会更好,谢谢。mplungjan:抱歉,我不需要忽略“.”我想突出显示HTML分区中存在的wordsArray中的每个单词。因此如果wordsArray[r]是firas。我想突出显示每个“firas”。不突出显示“firas”,这就是为什么我不能删除“.”的原因。请参见
javascript|firas\.|regexp