我有一个字符串(部分是 HTML),我想将字符串 :-)
替换为 bbcode :wink:
。但是这种替换不应该发生在 <pre>
内,而应该发生在任何其他标签中(甚至不在标签内)。
例如,我想替换
:-)<pre>:-)</pre><blockquote>:-)</blockquote>
至:
:wink:<pre>:-)</pre><blockquote>:wink:</blockquote>
我已经用下面的 RegEx 尝试过它,但它不起作用(没有任何东西被替换):
var s = ':-)<pre>:-)</pre><blockquote>:-)</blockquote>';
var regex = /:\-\)(?!(^<pre>).*<\/pre>)/g;
var r = s.replace(regex, ':wink:');
有人可以帮帮我吗? :-)
最佳答案
这应该这样做:-
var src = ":-)<pre>:-)</pre><blockquote>:-)</blockquote>"
var result = src.replace(/(<pre>(?:[^<](?!\/pre))*<\/pre>)|(\:\-\))/gi, fnCallback)
function fnCallback(s)
{
if (s == ":-)") return ":wink:"
return s;
}
alert(result);
它起作用是因为任何
pre
元素都将被正则表达式中的第一个选项拾取,一旦被消耗就意味着任何包含的 :-) 都无法匹配,因为处理器将超出它。关于javascript - 如何在 JavaScript 中替换不在特定标签内的文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1666790/