解析HTML后,我得到以下对象:
我想剥掉所有的"↵"除了一个。我怎样才能做到这一点?我试过这样的事情:
weirdString.replace(/(\r\n|\n|\r)/gm, ""));
然而,这取代了所有的"↵"但正如我已经提到的那样,我想要替换除第一个之外的所有......
答案 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
替换了换行符,以便能够看到效果。它还会删除行尾的所有尾随空格(通常是不可见的),但不会触及行开头的前导(这可能会影响文本的可见外观)