我有一个字符串(部分 HTML),我想在其中替换字符串 :-)
进入 bbcode :wink:
.但是这种替换不应该发生在 <pre>
之内。 ,但在任何其他标签中(甚至不在标签内)。
比如我要替换
:-)<pre>:-)</pre><blockquote>:-)</blockquote>
到:
:wink:<pre>:-)</pre><blockquote>:wink:</blockquote>
我已经用下面的正则表达式试过了,但它不起作用(没有被替换):
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/