【发布时间】:2015-10-15 14:36:59
【问题描述】:
我有一个字符串可以显示一些 html 标签,比如
this is a nice day for bowling <b>bbbb</b>
如何用 RegExp 替换所有 b 符号,例如,用 :blablabla: (例如)但 ONLY 在 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>
正则表达式应该将 only 第一个 :/ 替换为真正的笑脸图像,但不应替换第二个和第三个,因为它们在标签内部(和一部分)。这是一个使用来自答案之一的正则表达式的示例 sn-p。
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>
这很奇怪,但 DEMO 表明它捕获了正确的组,但替换函数中的相同正则表达式似乎不起作用。
【问题讨论】:
-
使用解析器,而不是正则表达式。
-
^^ Ed 说的。 You cannot reliably handle HTML with just a regular expression。你就是不能。您可能会想“哦,我的用例很简单,以至于……”事实并非如此。它只是不是。
标签: javascript regex