【问题标题】:javascript regex, replace multiple instances with a single one in multiline stringjavascript正则表达式,用多行字符串中的一个替换多个实例
【发布时间】:2013-11-29 07:35:14
【问题描述】:

我在javascript中有一个多行字符串如下:

"<p> </p>
<p> </p>
<p> </p>
<p> </p>
"

我正在尝试删除&lt;p&gt; &lt;/p&gt; 的额外实例,因此我正在尝试使用以下正则表达式。

var content = getContent() // This returns the string mentioned above.
content = content.replace(/(<p> <\/p>)+/g, "<p> <\/p>");

但这似乎不起作用。很可能是因为该字符串是多行字符串?我已经用单行字符串尝试了上面的正则表达式,它工作正常。在阅读了更多关于 javascript regex 的文档后,我意识到我们需要使用 m 修饰符来处理多行字符串。所以我将正则表达式更改为:

content = content.replace(/(<p> <\/p>)+/gm, "<p> <\/p>"); // note the `m` modifier

但它仍然不起作用。有什么线索吗?

【问题讨论】:

  • 怎么不工作了?它在返回什么?看起来你也用自己替换了匹配项 (replace(/(&lt;p&gt; &lt;\/p&gt;)+/gm, "&lt;p&gt; &lt;\/p&gt;");),我是不是遗漏了什么?
  • @Rob 它返回相同的字符串,猜你错过了+ 量词?
  • 呃,阅读您的问题后应该重新阅读标题。 :P

标签: javascript regex multiline


【解决方案1】:

您应该替换所有空格(包括新行):

content = content.replace(/(<p>\s*<\/p>\s*)+/g, "<p> <\/p>");

Demonstration

【讨论】:

  • 这行得通,但我有点困惑,为什么\s 而不是\n 换行?
  • @Amyth 您可以使用 \n 但您经常会在 html 中忽略空格,因为它们是不可见的。所以在这种情况下使用 \s 会更安全。
【解决方案2】:

这个替换:

content = content.replace(/(<p> +<\/p>\n*)+/g, "<p> </p>");
/=> <p> </p>

【讨论】:

  • [\s\S]任何字符,包括珍贵的内容。
猜你喜欢
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多