使用忽略html标记的regex搜索文本
Search text using regex that ignore html tags
我需要在搜索的文本周围添加高亮类。但其他html标签是在我的方式。下面是一个例子:
开始:
<div class="source">your <b><i>text</i></b> using <a href="#">regex ignoring html</a> tags</div>
我搜索:text using regex
预期结果(在本例中,我将使用span
来突出显示):
<div class="source">your <b><i><span>text</span></i></b><span> using </span><a href="#"><span>regex</span> ignoring html</a> tags</div>
我对此有解决方案,但它需要特定的正则表达式搜索文本忽略html标签里面。如果有其他的解决方案,我愿意听取建议。它不需要写在香草js。下面是我目前解决方案的简化版本,缺少提到的正则表达式。
下面的示例不能工作,因为缺少正则表达式
var source = document.querySelector('.source').innerHTML; // html from example
var text = 'text using regex'; // what we searching for
var htmlTag = new RegExp('(<''/?([a-z]+)([^<]+)*(?:>))+', 'g'); // find html tags
var missingRegExp = new RegExp('', 'i'); // << missing regex
// Wrap searched text with span tag
var result = source.replace(missingRegExp, function (searchedText) {
// Wrap html tags inside searched text with span tag
searchedText = searchedText.replace(htmlTag, function (match) {
return '</span>' + match + '<span>';
});
return '<span>' + searchedText + '</span>';
});
console.log('Result: ' + result);
在这种情况下,删除html标签不是一个选项。
您有一个像text using regex
这样的字符串。您应该关心中间的空格,并用适当的RegEx替换它们以匹配HTML标签,但首先您需要将每个单词括在括号中:
> '(' + "text using regex".split(' ').join(') (') + ')'
< "(text) (using) (regex)"
下一步是用RegEx: ((?:'s*(?:<'/?'w[^<>]*>)?'s*)*)
替换空格,所以我们最后修改的版本应该是:
< "(text)((?:'s*(?:<'/?'w[^<>]*>)?'s*)*)(using)((?:'s*(?:<'/?'w[^<>]*>)?'s*)*)(regex)"
如果我们有3个单词要搜索,那么我们最终总共有5个捕获组(n
words -> n
+ n-1
捕获组),所以你应该基于此创建一个替换字符串。这里我们应该有这样的替换字符串:
<span>$1</span>$2<span>$3</span>$4<span>$5</span>
现在你已经编译了RegEx版本和替换字符串,.replace()
方法将成功地结束它们。
现场演示
相关文章:
- 如何搜索术语“;AI”;使用regex
- 如何在php和javascript中使用regex检测空格分隔词(在全文搜索查询中)
- Regex,它搜索一个起始字符,介于两者之间的任何字符,然后是一个结束字符
- 在JavaScript上使用RegEx在多个圆括号中搜索唯一值
- 为什么字符串搜索的参数表现得像Regex
- 如何使用regex在以前的搜索结果中进行搜索和替换
- VBA中的Regex-如何恢复搜索
- Javascript Regex exec 在向搜索文本添加属性/引号后冻结
- 搜索Thorough链接并用Regex、PHP或Javascript识别RSS源
- 使用Jquery数据表禁用智能搜索/regex
- JavaScript + RegEx Complications - 搜索不包含子字符串的字符串
- MongoDB在一个列表中检查多个regex匹配项以进行免费文本搜索
- 从数据库(NodeJS)中的搜索返回Regex模式
- regex使用jQuery精确匹配多个搜索词
- Regex查找正则表达式标志和搜索模式
- Regex模式搜索从2个字母或2个数字开始
- regex向后搜索
- Javascript通配符regex搜索结果不一致
- 数据表默认regex只搜索开始
- 使用忽略html标记的regex搜索文本