用正则表达式标记字符串中的文本,但不包括链接
mark text in a string with regular expression but exclude links
我有一个文本,我希望当用户搜索一个术语时,通过用标记标记包装术语,该术语会突出显示。
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中的搜索词也被标记标签包装,它破坏了链接。
如何排除由标记标签包装的链接?
使用负前向来添加一个额外的约束,即在没有<的情况下,术语后面不能跟一个>。这将有效地排除<…
>标记。var pattern = new RegExp('('+term+')(?![^<]*>)', 'gi');
https://jsfiddle.net/qdk80o0k/- 你在倒车
- 使用
innerHTML
将破坏事件 - 使用
innerHTML
将触发DOM的再生
为了让事情变得简单,你应该使用一个现有的插件。那里有许多jQuery插件,但由于您没有添加jquery
标记,我假设您正在搜索纯JS解决方案。那么唯一的插件就是mark.js。
的例子,你的用例
相关文章:
- jQuery添加的文本不显示
- 如何将页面上的所有电话号码更改为可点击链接,不包括特定类别的元素
- 输出文本不't以正确格式显示
- html/jquery输入类型:单选框中的文本不起作用
- 将正则表达式重新分解为不包括空组
- 为什么从JSON文本到类型的转换不包括函数
- XMLHttpRequest调用不包括If Modified Since标头
- 使用 JavaScript 执行一行 PHP(不包括 PHP 文件)
- 为什么我的导航按钮或按钮文本不会移动到中心
- 捆绑器不包括 .min 文件
- 与冒号(不包括冒号)之间的正则表达式单词匹配
- 如何从文本区域获取文本,包括换行符
- 包含特殊字符 (!,@,#,&) 不包括其他特殊字符
- 如何检查所有文本框(包括动态添加的)是否为空
- 截断javascript中不包括html元素的文本
- 返回方括号之间的文本,不包括方括号
- 如何获取元素的文本,但不包括该元素的子元素
- 用正则表达式标记字符串中的文本,但不包括链接
- Jquery /javascript代码,用于获取网页主页面的全文内容(包括链接文本但不包括图像)
- Javascript或jquery代码获得整个文本内容的网页内的iframe(包括/不包括该页面的链接)