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