如何排除锚标签?
How to exclude anchor tags?
下面的代码将接受一个输入,然后 运行 它通过评论列表查找关键字,并将用突出显示它的 Mark 标记包装关键字。
除了 REGEX 还会替换定位标记之间的关键字外,这几乎可以正常工作。
如何更改下面的正则表达式以忽略锚标记?
如有任何帮助,我们将不胜感激。
谢谢。
inputHighlight: function(){
let currentURL = document.location.toString(),
reviewList = $('.review-list');
if(currentURL.indexOf('kw') !== -1){
var reviews = reviewList.html();
var term = utilities.queryString.getQueryValue("kw");
term = term.replace(/(\s+)/,"(<[^>]+>)*(<[^>]+>)*");
var pattern = new RegExp("("+term+")", "gi");
reviews = reviews.replace(pattern, "<mark></mark>");
reviews = reviews.replace(/(<mark>[^<>]*)((<[^>]+>)+)([^<>]*<\/mark>)/,"</mark><mark>");
reviewList.html(reviews);
}
}
此处描述了旨在处理此类 "find a word but not a specific context" 情况的技巧:http://www.rexegg.com/regex-best-trick.html。
本质上是:匹配不需要的上下文或(使用交替)你的模式。然后根据匹配的替代方案,按原样替换为第一个(即不需要的上下文)或用标记标记包围的第二个。
所以替换
var pattern = new RegExp("("+term+")", "gi");
reviews = reviews.replace(pattern, "<mark></mark>");
和
var pattern = new RegExp("<a\b[^>]*>.*?<\/a>|("+term+")", "gi");
reviews = reviews.replace(pattern, function(match, p1) {
return p1 ? "<mark>" + p1 + "</mark>" : match;
});
演示:
var term = "TEST TERM"
var reviews = document.getElementById("reviews").innerHTML;
var pattern = new RegExp("<a\b[^>]*>.*?<\/a>|("+term+")", "gi");
reviews = reviews.replace(pattern, function(match, p1) {
return p1 ? "<mark>" + p1 + "</mark>" : match;
});
document.getElementById("reviews").innerHTML = reviews;
<div id="reviews">
TEST TERM
<a href="#">TEST TERM</a>
</div>
下面的代码将接受一个输入,然后 运行 它通过评论列表查找关键字,并将用突出显示它的 Mark 标记包装关键字。
除了 REGEX 还会替换定位标记之间的关键字外,这几乎可以正常工作。
如何更改下面的正则表达式以忽略锚标记?
如有任何帮助,我们将不胜感激。
谢谢。
inputHighlight: function(){
let currentURL = document.location.toString(),
reviewList = $('.review-list');
if(currentURL.indexOf('kw') !== -1){
var reviews = reviewList.html();
var term = utilities.queryString.getQueryValue("kw");
term = term.replace(/(\s+)/,"(<[^>]+>)*(<[^>]+>)*");
var pattern = new RegExp("("+term+")", "gi");
reviews = reviews.replace(pattern, "<mark></mark>");
reviews = reviews.replace(/(<mark>[^<>]*)((<[^>]+>)+)([^<>]*<\/mark>)/,"</mark><mark>");
reviewList.html(reviews);
}
}
此处描述了旨在处理此类 "find a word but not a specific context" 情况的技巧:http://www.rexegg.com/regex-best-trick.html。
本质上是:匹配不需要的上下文或(使用交替)你的模式。然后根据匹配的替代方案,按原样替换为第一个(即不需要的上下文)或用标记标记包围的第二个。
所以替换
var pattern = new RegExp("("+term+")", "gi");
reviews = reviews.replace(pattern, "<mark></mark>");
和
var pattern = new RegExp("<a\b[^>]*>.*?<\/a>|("+term+")", "gi");
reviews = reviews.replace(pattern, function(match, p1) {
return p1 ? "<mark>" + p1 + "</mark>" : match;
});
演示:
var term = "TEST TERM"
var reviews = document.getElementById("reviews").innerHTML;
var pattern = new RegExp("<a\b[^>]*>.*?<\/a>|("+term+")", "gi");
reviews = reviews.replace(pattern, function(match, p1) {
return p1 ? "<mark>" + p1 + "</mark>" : match;
});
document.getElementById("reviews").innerHTML = reviews;
<div id="reviews">
TEST TERM
<a href="#">TEST TERM</a>
</div>