繁体   English   中英

JavaScript RegEx忽略字符串

[英]JavaScript RegEx Ignore String

我有从服务器返回的搜索结果和一个正则表达式,该正则表达式使用搜索查询中的单词突出显示结果。

words = searchQuery.split(' ');

$.each(words, function() { 

  var word = this.trim();
  var regex = new RegExp('(' + word + ')(?!>|b>)', 'gi');

  searchResult = searchResult.replace(regex, "<b>$1</b>");

});

正常工作,直到我搜索如下内容:

搜索词:“带有javascript的脚本”

搜索结果:“ Java 脚本是一种编程语言...”

它应突出显示整个单词,例如“ javascript是一种编程语言...”。 但是,由于字符串已从“ javascript”更改为“ java <b>脚本</b> ”,因此它不再与搜索查询中的第二个单词匹配。 word值为“ b”,“ /”,“ <”或““>”时,它也会产生奇怪的值。

我的问题是如何忽略正则表达式中的<b></b>标记,而仅匹配原始搜索查询? 我尝试使用前瞻,但是没有用。

我认为按字符串长度对数组进行降序排序可以解决此问题:

words = searchQuery.split(' ');

words.sort(function(a, b){
  return b.length - a.length;
});

$.each(words, function() { 

  var word = this.trim();
  var regex = new RegExp('(' + word + ')(?!>|b>)', 'gi');

  searchResult = searchResult.replace(regex, "<b>$1</b>");

});

您不能通过正则表达式忽略字符串中的任何内容。 尝试使用“ \\ b”搜索整个单词

 var searchQuery = 'script with lang javascript'; var searchResult = 'javascript is a programming language'; words = searchQuery.split(' '); $.each(words, function() { var word = this.trim(); var regex = new RegExp('\\\\b(' + word + ')\\\\b(?!>|b>)', 'gi'); searchResult = searchResult.replace(regex, "<b>$1</b>"); }); console.log(searchResult); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 

暂无
暂无

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

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