[英]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.