替换html标签之间的字符串,多次出现问题

时间:2019-03-14 14:11:46

标签: javascript regex

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

Regex101

1 个答案:

答案 0 :(得分:0)

您的代码似乎对我有用,请检查此fiddle

我的猜测是这一行:

$(".contentdiv *:contains('" + searchString + "')")

实际上并没有返回正确的HTML元素,可能,那行代码只是获得searchString所在的第一个标记。

要做:

console.log($(".contentdiv *:contains('" + searchString + "')"))

调试输出中是否打印了正确的元素?

如果您的问题仍然存在,我将需要更多的HTML代码来理解上下文并帮助您解决问题。

编辑:

抱歉,我花了很长时间...所以,这是我建议的新RegExp:

/(create)([\sa-zA-Z0-9<])(?!.*\.\w+)/gi

create替换为searchString的地方。

  • 第一个捕获组是您的搜索词;
  • 第二个捕获组将接受任何单词,后跟查找空格,字母,数字和标签起始符;
  • 第3个捕获组是一个否定的超前查询,用于转义包含搜索词的URL(这是通过查找扩展名完成的);

您的RegExp为什么不起作用?由于先捕获HTML标签,然后在同一捕获组中,您捕获了什么(。*?),直到找到您的单词为止,然后又捕获了所有内容,直到找到了结束标签。

好吧……无论如何,都可以重复你的话!

New fiddle