Javascript 单正则表达式从多行输入中删除空行和双空格
我想结合两个正则表达式函数来清理一些textarea输入。我想知道这是否可能,或者我是否应该把它分成两个单独的(工作正常,但看起来不那么漂亮或干净) 我已经对其中一个进行了调整,以便它们利用全局和多行(Javascript 单正则表达式从多行输入中删除空行和双空格,javascript,regex,Javascript,Regex,我想结合两个正则表达式函数来清理一些textarea输入。我想知道这是否可能,或者我是否应该把它分成两个单独的(工作正常,但看起来不那么漂亮或干净) 我已经对其中一个进行了调整,以便它们利用全局和多行(/gm),并被零(')所取代。我尝试过在任何位置使用括号和垂直/或线条,但它始终不会给出预期的结果,因此我只能假设有一种方式我忽略了,或者我应该保持原样 正则表达式1:/^\s+[\r\n]/gm 正则表达式2:/^\s++(?=)|\s++$/gm 当前在JavaScript中:string.r
/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
编辑:非常感谢您提供完整的解决方案:
/^\s*$[\r\n]*.^[^\s\r\n]+$.[^\s\r\n]+$([^\s\r\n]){2,}.\s+$(?![^])/gm
我建议使用替换模板“$1$2”
():
/^\s*|\s*$|\s*(\r?\n)\s*|(\s)\s+/g
说明:
-匹配文本开头的空白^\s*
-匹配文本结尾的空白\s*$
-匹配位于不同行中的两个单词之间的空格,捕获一个CRLF到组\s*(\r?\n)\s*
$1
-捕获2+个空格字符序列中的第一个空格字符以分组(\s)\s+
$2
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
哇,太干净了!非常感谢你!