Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单正则表达式从多行输入中删除空行和双空格_Javascript_Regex - Fatal编程技术网

Javascript 单正则表达式从多行输入中删除空行和双空格

Javascript 单正则表达式从多行输入中删除空行和双空格,javascript,regex,Javascript,Regex,我想结合两个正则表达式函数来清理一些textarea输入。我想知道这是否可能,或者我是否应该把它分成两个单独的(工作正常,但看起来不那么漂亮或干净) 我已经对其中一个进行了调整,以便它们利用全局和多行(/gm),并被零(')所取代。我尝试过在任何位置使用括号和垂直/或线条,但它始终不会给出预期的结果,因此我只能假设有一种方式我忽略了,或者我应该保持原样 正则表达式1:/^\s+[\r\n]/gm 正则表达式2:/^\s++(?=)|\s++$/gm 当前在JavaScript中:string.r

我想结合两个正则表达式函数来清理一些textarea输入。我想知道这是否可能,或者我是否应该把它分成两个单独的(工作正常,但看起来不那么漂亮或干净)

我已经对其中一个进行了调整,以便它们利用全局和多行(
/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*$
    -匹配文本结尾的空白
  • \s*(\r?\n)\s*
    -匹配位于不同行中的两个单词之间的空格,捕获一个CRLF到组
    $1
  • (\s)\s+
    -捕获2+个空格字符序列中的第一个空格字符以分组
    $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
哇,太干净了!非常感谢你!