我有从服务器返回的搜索结果和使用搜索查询中的单词突出显示结果的regex。
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>
script</b>
",因此它不再匹配搜索查询中的第二个单词。当word
的值为"b“、"/”、"<“或">”时,它也会产生奇怪的值。
我的问题是如何忽略regex中的<b>
和</b>
标记,而只匹配原始的搜索查询?我试着用放映机,但没成功。
发布于 2015-03-15 14:21:08
我认为按字符串长度对数组进行降序排序可以解决这个问题:
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>");
});
发布于 2015-03-15 20:58:30
不能通过regex忽略字符串中的任何内容。试着用"\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>
https://stackoverflow.com/questions/29065656
复制