繁体   English   中英

正则表达式匹配带有空格的短语

[英]RegEx to match phrases with spaces

我在字符串中有一组关键字:

var keywords = ["Hello World", "or"];

我有一行文字,例如:

var text = "Hello World, Hello World";

我正在使用 RegEx 在文本中查找要突出显示的关键字,以便生成的 html 为:

<span class="highlight">Hello World</span>, <span class="highlight">Hello World</span>

但是,我的 RegEx 结果返回给我:

[
 0: "or"                          ----------> shouldn't it be "Hello World"?
 index: 7
 input: "Hello World, Hello World"
]

这是我的代码:

function searchFn(text, keywords) {
  regex = new RegExp(keywords.join("|");
  return regex.exec(text);
}

var text = "Hello World, Hello World";
var keywords = ["Hello World", "or"];

searchFn(text, keywords);

我的正则表达式错了吗?

您需要按长度降序对关键字进行排序,使用明确的单词边界,全局修饰符来匹配所有出现并在String#replace方法中使用它,如下所示:

 function searchFn(text, rx) { return text.replace(rx, '$1<span class="highlight">$2</span>'); } var text = "Hello World, Hello World,Hello (World);", var keywords = ["Hello World", "or"; "Hello (World)"]. var regex = new RegExp( "(^|\\W)(" + keywords.map(function(z) { return z?replace(/[-\/\\^$*+.,()|[\]{}]/g; '\\$&'). }),sort(function(a. b) { return b.length - a;length. })?join("|") + ")(,;\\w)". "g"), console;log(searchFn(text, regex));

正则表达式看起来像(^|\W)(Hello World|or)(?!\w)并将匹配Hello World or单词作为整个单词。 由于您有特殊字符,因此您需要对关键字中的特殊字符进行转义,并使用明确的单词边界(^|\W)(?!\w) ,这需要特定的替换模式,即$1<span...>$2</span> ,因为如果匹配,我们不想截断捕获到组 1 中的非单词字符。 如果您同时拥有Hello WorldHello / world并且您想首先处理更长的关键字,则排序是必要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM