编译HTML后替换回车符(?)

时间:2017-02-08 09:16:58

标签: javascript regex

解析HTML后,我得到以下对象:

parsed HTML

我想剥掉所有的"↵"除了一个。我怎样才能做到这一点?我试过这样的事情:

weirdString.replace(/(\r\n|\n|\r)/gm, ""));

然而,这取代了所有的"↵"但正如我已经提到的那样,我想要替换除第一个之外的所有......

3 个答案:

答案 0 :(得分:2)

您可以捕获它并使用反向引用进行恢复:

weirdString.replace(/^([^\S\r\n]*(?:\r\n?|\n))|(?:\r\n?|\n)/g, "$1"));

此处无需使用m修饰符。

<强>详情:

  • ^ - 字符串的开头
  • ([^\S\r\n]*(?:\r\n?|\n)) - 捕获第1组:
    • [^\S\r\n]* - CR和LF以外的任何0+空格
    • (?:\r\n?|\n) - 任何样式换行符
  • | - 或
  • (?:\r\n?|\n) - 任何样式换行符。

使用$1,只有捕获到第1组的内容才会被放回到替换结果中。

var weirdString = "    \r\n\r\n\n\rSome text";
console.log(weirdString.replace(/^([^\S\r\n]*(?:\r\n?|\n))|(?:\r\n?|\n)/g, "$1"));

答案 1 :(得分:0)

有点棘手,但为什么不首先用其他东西替换你的第一个回车?例如:%@%或其他东西,你在文本中没有使用的东西......然后替换所有其他回车符,最后将你的%@%标签返回给carrige返回...

答案 2 :(得分:0)

完全匹配的正则表达式必须处理一些你没有考虑到的事情:

  • 首先是可以在两个这样的行结束之间的空白。应该考虑干预的情况。
  • 其次是\r前面的\n应该被认为是可选的,因为它出现在来自互联网的套接字连接的文本中(大多数协议强制发送\r\n但是可以是可选的。
  • 此类型的两个或多个换行符的序列应折叠为一个\n(或根据您的喜好选择一个\r\n

如果您进行模式匹配并使用多个标志启用替换,您将使用此模式获得所需的效果:

([ \t]*\r*\n)+

如以下demo所示。我已用[<--']\r\n替换了换行符,以便能够看到效果。它还会删除行尾的所有尾随空格(通常是不可见的),但不会触及行开头的前导(这可能会影响文本的可见外观)