【发布时间】:2020-05-14 08:31:48
【问题描述】:
我想结合两个正则表达式函数来清理一些文本区域输入。我想知道这是否可能,或者我是否应该将它保留两个单独的(工作正常但看起来不漂亮或干净)。
我已经进行了调整,以便它们使用全局和多行 (/gm) 并被替换为空 ('')。我尝试在任何位置使用括号和垂直/或线条,但它永远不会给出预期的结果,所以我只能假设有一种我忽略的方法或者我应该保持原样。
正则表达式 1:/^\s+[\r\n]/gm
正则表达式 2:/^\s+| +(?= )|\s+$/gm
目前在 JavaScript 中:string.replace(/^\s+[\r\n]/gm,'').replace(/^\s+| +(?= )|\s+$/gm,'')
目标是删除:
- 每行开头和结尾的空格
- 空行(包括开头和结尾的任何行)
- 双空格
没有它在同一行结束。单行换行符 (\r\n) 最后应该仍然存在。
正则表达式 1 是删除任何空行 (^\s+[\r\n]),正则表达式 2 在开头 (^\s+) 和结尾 (\s+$) 中修剪空格,并删除双精度(以及三重、四重等) ) 之间的空格 (+(?= ))。
输入:
Let's
make this
look
a little
nicer
and
more
readible
输出:
Let's
make this
look
a little
nicer
and
more
readible
编辑:非常感谢 Wiktor Stribiżew and his comment 提供完整的解决方案:
/^\s*$[\r\n]*|^[^\S\r\n]+|[^\S\r\n]+$|([^\S\r\n]){2,}|\s+$(?![^])/gm
【问题讨论】:
-
试试
s.replace(/^\s*$[\r\n]*|^[^\S\r\n]+|[^\S\r\n]+$|([^\S\r\n]){2,}/gm, '$1')。要同时删除尾随换行符,请将|\s+$(?![^])添加到模式的末尾。 -
以
/^\s*\n|^\s+/gm开头删除行首和行尾的空行和空格。它不包括单词之间的双空格。 -
@BojanBedrač 它确实完成了大部分工作,尤其是在为双空格添加
+(?= )和为尾随换行符添加 Wiktor 的|\s+$(?![^])时。不幸的是,行尾的空格仍然存在。 -
@BojanBedrač 然而,这个黑客可以工作:
/^\s*[\r\n]|^\s+| +(?= )| +$|\s+$(?![^])/gm
标签: javascript regex