javascript - 使用正则表达式标记字符串中的文本但排除链接

标签 javascript regex

我有一个文本,我希望当用户搜索某个术语时,通过用标记标签包裹该术语来突出显示该术语。

用 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');

https://jsfiddle.net/qdk80o0k/

关于javascript - 使用正则表达式标记字符串中的文本但排除链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40263575/

相关文章:

javascript - 使用 AJAX 在 rails 上加载 CSRF token

javascript - 在另一个指令中使用 ui-tinymce 指令

javascript - 如何创建 session 登录

C#正则表达式匹配字符串

javascript - 在javascript中使用过滤器时获取项目索引

javascript - Canvas getImageData 在某些移动设备上返回不正确的数据

javascript - 像 JavaScript 函数一样执行 facebook 吗?

java - String.contains 找到一个子字符串但没有找到 Pattern.matches?

java - StringBuilder 和正则表达式解析

java - 有效结尾的正则表达式