我有一些字符串,其中可能会出现一些HTML标签,例如
this is a nice day for bowling <b>bbbb</b>
我该如何使用正则表达式替换所有的b符号,例如用:blablabla:(仅为例子),但仅限于HTML标签外部?
因此,在这种情况下,结果字符串应变为:
this is a nice day for :blablabla:owling <b>bbbb</b>
编辑:根据我所得到的答案,我想更加具体地说明。首先,我只有一个字符串,不是DOM元素或其他内容。该字符串可能包含标记(开放和关闭)。主要的想法是能够替换文本中任何位置,除了标记内部。例如,如果我有一个这样的字符串
not feeling well today :/ check out this link <a href="http://example.com">http://example.com</a>
这个正则表达式应该只替换第一个:/
为真正的笑脸图片,但不能替换第二个和第三个,因为它们在标签内(并且是标签的一部分)。以下是使用答案中的正则表达式的示例片段。
var s = 'not feeling well today :/ check out this link <a href="http://example.com">http://example.com</a>';
var replaced = s.replace(/(?:<[^\/]*?.*?<\/.*?>)|(:\/)/g, "smiley_image_here");
document.querySelector("pre").textContent = replaced;
<pre></pre>
很奇怪,但是演示显示已经捕获了正确的组,但是在替换函数中相同的正则表达式似乎不起作用。