【问题标题】:regex pattern highlight n sequence string words inside double quotes正则表达式模式突出显示双引号内的 n 个序列字符串单词
【发布时间】:2023-03-08 10:48:01
【问题描述】:

这是我从文本字符串中突出显示特定单词的脚本我唯一的问题是,当我想突出显示三个序列单词时,它只突出显示第一个单词,然后第二个仍然没有突出显示,然后突出显示第三个单词

* 被截断并且运行良好

? 高亮单词+ n 个字符

这是一个突出显示 n 个序列单词的示例。 我的问题在这里我想突出显示""里面的词 当我有双引号时,突出显示引号内的单词。

"reference is" 需要高亮而不是分隔的单词

exp:参考好是test1 test2(这里只高亮reference is

var row = {
  "Abstract": "I have a reference server for reference and just a server here." 
};

//here i need to highlight "reference is" to serve test* (n sequnence words)

var wordsToHighlight = '"reference is" to ser?? test*';
var result = row["Abstract"];

wordsToHighlight.split(" ").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;
&lt;div id="result"&gt;&lt;/div&gt;

【问题讨论】:

  • 你应该解释你所追求的。在我看来,您并没有真正尝试解决当前的问题。荧光笔应该如何解析var wordsToHighlight = '"reference is" to ser?? test*'
  • 当我有双引号时会突出显示其中的单词
  • to serve test testing tests 也需要高亮加上reference is
  • 它就像魅力一样!非常感谢!

标签: javascript regex


【解决方案1】:

你需要将原来的wordsToHighlight字符串分割成

.split(/"([^"]+)"|\s+/).filter(Boolean)

它将用双引号子字符串分割字符串,同时将双引号之间的子字符串推入结果数组(String#split 总是将捕获的子字符串推入结果数组),并带有 1+ 个空格,.filter(Boolean) 将删除空拆分操作期间可能产生的项目。

请参阅regex demo

JS 演示:

var row = {
  "Abstract": "This reference is to serve test as a useful reference for testing whether the styling of reference works or not. Adtest all occurrences of 'reference' should be given a color of red tests" 
};

//here i need to highlight "reference is" to serve test* (n sequnence words)

var wordsToHighlight = '"reference is" to ser?? test*';
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;
&lt;div id="result"&gt;&lt;/div&gt;

【讨论】:

  • 如果我有 wordsToHighlight = "reference, server" mean 仅突出显示 reference server,我还有另一个例子
  • @MokiNex 将\s+ 替换为[\s,]+
  • 你的方法很好用,只是我想添加这个条件,如果我有"word1 , word2" highlight word1 word2 exp wordsToHighlight = "reference, server" mean highlight just reference server
  • @MokiNex 我怀疑我理解你。如果您有wordsToHighlight = "reference, server",您的意思是要突出显示这两个单词的序列吗?见jsfiddle.net/6gd8vw3n/6
  • jsfiddle.net/6gd8vw3n/9 这是我作为突出显示单词的输入的示例
猜你喜欢
  • 2018-09-20
  • 2016-08-20
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 2012-11-24
  • 1970-01-01
相关资源
最近更新 更多