如果我在""
内有单词,我想添加一个条件。双引号var wordsToHighlight =' "word1, word2" '
表示在整篇文章中突出显示word1 word2
exp var wordsToHighlight = ' "a reference, server" '
表示在整篇文章中突出显示a reference
server
我的问题需要突出显示整篇文章中双引号内的文字
阐释:
*
它的截断并且效果很好
?
突出显示字词+ n个字符
.split(/"([^"]+)"|\s+/).filter(Boolean)
它会在推送时用双引号子串分割字符串 双引号之间的子字符串到结果数组中 (String#split总是将捕获的子串推入 结果数组),以及1+空格和.filter(布尔)将 删除拆分操作期间可能导致的空项目。
var row = {
"Abstract": "I have a reference server for reference and just a server here server test."
};
var wordsToHighlight = ' "a reference, server" jus? fo* ';
var result = row["Abstract"];
wordsToHighlight.split(/"([^"]+)"|\s+/).filter(Boolean).forEach(function (word) {
word = word.replace(/\*/g, '\\S*').replace(/\?/g, '.').replace(/\"/g, '.');
result = result.replace(new RegExp('(\\s|^)(' + word + ')(?=\\s|$)', "gi"),'$1<span style="background-color:yellow;">$2</span>');
});
document.querySelector("#result").innerHTML = result;
<div id="result"></div>
我预期的结果:
答案 0 :(得分:2)
您需要以更复杂的方式解析单词以突出显示:拆分双引号字符串和非空白字符块。后者可以按原样添加到结果数组中,但双引号中的内容应使用逗号(以及任何封闭空格)进行拆分。
var row = {
"Abstract": "I have a reference server for reference and just a server here server test."
};
var wordsToHighlight = ' "a reference, server" jus? fo* ';
var result = row["Abstract"];
var wordsTH2=[], m;
var rx = /"([^"]+)"|\S+/g;
while (m=rx.exec(wordsToHighlight)) {
if (m[1]) {
var arr = m[1].split(/\s*,\s*/);
for (var i=0; i<arr.length;i++) {
wordsTH2.push(arr[i]);
}
} else {
wordsTH2.push(m[0]);
}
}
wordsTH2.forEach(function (word) {
word = word.replace(/\*/g, '\\S*').replace(/\?/g, '.').replace(/\"/g, '.');
result = result.replace(new RegExp('(\\s|^)(' + word + ')(?=\\s|$)', "gi"),'$1<span style="background-color:yellow;">$2</span>');
});
document.querySelector("#result").innerHTML = result;
<div id="result"></div>