javascript - 如何替换不在 JavaScript 中特定标签内的文本

标签 javascript regex html-parsing

我有一个字符串(部分 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/

相关文章:

java - REGEX 匹配器不替换反斜杠

python - beautifulsoup解析html标签异常

regex - VBScript 正则表达式不匹配

python - Html 解析与正则表达式

Ruby 中的 HTML 解析器到 DOM

javascript - JQM : $. mobile.changepage 未加载外部 .JS 文件

javascript - 我的 asp.net mvc View 中的 JQueryUI Datepicker

javascript - 在 Javascript 中移动字符串

javascript - 在其自定义方法中获取对组件实例的引用

mysql - 正则表达式,将 "22,09"替换为 "22.09"