正则表达式模式突出显示双引号内的字符串单词

时间:2018-04-10 11:59:28

标签: javascript regex

如果我在""内有单词,我想添加一个条件。双引号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>

我预期的结果:

enter image description here

1 个答案:

答案 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>