【发布时间】:2013-02-08 12:32:47
【问题描述】:
过去我不止一次想知道格式化文本块的问题,以便所有运行的空白都“折叠”到一个空格中,除了应该保留段落 - 这意味着所有运行的空白行折叠成单个空行,但不折叠成一个空格。
空白行当然是两个行尾字符(通常是回车或换行或两者),没有任何中间的非空白字符。 (可能还有其他空格,例如空格或制表符)。
这肯定是一个相当普遍的问题,虽然解决起来并不难,但我总是对我的解决方案不满意,这些解决方案缺乏优雅或存在漏洞。当然有一种优雅的表达方式可以做到这一点。
我将把它开放给所有正则表达式风格,因为我想至少在 Perl、Vim 和 JavaScript 中这样做。这是我最近在 node.js 中懒惰的尝试,漏洞显然是魔术词。这可能是我使用过的不令人满意的解决方案的典型::
text = text.replace(/\r?\n(?:\s*\r?\n)+/g, '_SomeMagicWord_');
text = text.replace(/\s\s+/gm, ' ');
text = text.replace(/_SomeMagicWord_/g, '\r\n\r\n');
如果我的解释不清楚,它应该从这个转换:
富吧巴兹
弗雷德·巴尼·威尔玛
一二三
到这里:
富吧巴兹弗雷德巴尼威尔玛
一二三
(也要注意行尾的尾随空格!)
【问题讨论】:
标签: regex whitespace text-formatting blank-line