使用 Javascript Regex 将字符换行到字符串中,不包括链接标签

2024-01-09

EDIT

这就是我必须做的...

想象一下,如果我有一个文本,里面有一些 html 标签(它仍然是一个字符串):

var string = '<p>Hello, my name is Mauricio</p><p>Hi, my name is Patricia</p><p class="warn">Yeah, My name is Carl</p><a href="#"><img src="#" /></a>';

我想将所有字母“a”包裹起来

 <span class="ui-match"></span>

但我不能替换标签中的任何内容,无论是其中的内容,还是

元素。

因此,如果我想包装该字符串中的所有字母“a”,它将像这样返回:

<p>Hello, my n<span class="ui-match">a</span>me is M<span class="ui-match">a</span>uricio</p><p>Hi, my n<span class="ui-match">a</span>me is P<span class="ui-match">a</span>trici<span class="ui-match">a</span></p><p class="warn">Ye<span class="ui-match">a</span>h, My n<span class="ui-match">a</span>me is C<span class="ui-match">a</span>rl</p><a href="#"><img src="#" /></a>

所有字母“a”都用

 <span class="ui-match"></span>

,但链接和段落不是。

这个字符串也来自 API,所以它是动态的...我正在搜索的这个字母是动态的,所以它可以是“a”或“abc”...它不能区分大小写

thanks


该解决方案符合您的要求吗?

string = string.replace(/a(?![^<]*?>)/g, '<span class="ui-match">a</span>');

关于的一点帮助(?![^<]*?>)(大致:“一些文本后面没有>") :

(?!...)   not followed by
[^<]*     any char except "<", zero or more times
?>        until next ">"

包装在一个函数内:

function replace(html, text, replacement) {
    // RegExp.escape : http://stackoverflow.com/q/3561493/1636522
    var re = new RegExp('(' + RegExp.escape(text) + ')(?![^<]*?>)', 'g');
    return html.replace(re, replacement);
}
var html = '<a class="azerty"> azerty &lt; azerty </a>';
html = replace(html, 'azerty', '<b>$1</b>');
// "<a class="azerty"> <b>azerty</b> &lt; <b>azerty</b> </a>"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Javascript Regex 将字符换行到字符串中,不包括链接标签 的相关文章