簡體   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