试图用javascript中的正则表达式替换字符串,但是在理解如何更改正则表达式以匹配“ matchme 和 matchme ”时遇到问题,只有第一个是与当前正则表达式匹配。
var re = new RegExp("(<.+?>[^<>]*?)(" + searchString + ")([^<>]*?<.+?>)", "gi");
$(".contentdiv *:contains('" + searchString + "')").html(function (_, html) {
return html.replace(re, '$1<span class="match">$2</span>$3');
});
答案 0 :(得分:0)
您的代码似乎对我有用,请检查此fiddle
我的猜测是这一行:
$(".contentdiv *:contains('" + searchString + "')")
实际上并没有返回正确的HTML元素,可能,那行代码只是获得searchString
所在的第一个标记。
要做:
console.log($(".contentdiv *:contains('" + searchString + "')"))
调试输出中是否打印了正确的元素?
如果您的问题仍然存在,我将需要更多的HTML代码来理解上下文并帮助您解决问题。
编辑:
抱歉,我花了很长时间...所以,这是我建议的新RegExp:
/(create)([\sa-zA-Z0-9<])(?!.*\.\w+)/gi
将create
替换为searchString
的地方。
您的RegExp为什么不起作用?由于先捕获HTML标签,然后在同一捕获组中,您捕获了什么(。*?),直到找到您的单词为止,然后又捕获了所有内容,直到找到了结束标签。
好吧……无论如何,都可以重复你的话!