我有一个文本,我希望当用户搜索某个术语时,通过用标记标签包裹该术语来突出显示该术语。
用 JavaScript 封装匹配项:
var sampleText = window.document.getElementById('test').innerHTML;
var _keywordHighlight = function (text, term) {
var pattern = new RegExp('('+term+')', 'gi');
text = text.replace(pattern, '<mark>$1</mark>');;
return text;
};
var newText = _keywordHighlight(sampleText, 'sample');
window.document.getElementById('test').innerHTML = newText;
jsfiddle.net 链接:
https://jsfiddle.net/homa/j0Lgk6pf/
问题是,url 中的搜索词也用 mark 标签包裹,从而破坏了链接。
如何排除由标记标记包裹的链接?
最佳答案
使用负前瞻添加一个附加约束,即该术语后面没有 >,而没有先有 <。这将有效地排除 <...> 标记内的匹配。
var pattern = new RegExp('('+term+')(?![^<]*>)', 'gi');
关于javascript - 使用正则表达式标记字符串中的文本但排除链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40263575/