9

我想删除所有前导和尾随空格。以及用字符串中的单个空格替换多个空格,以便字符串中的所有单词都由单个空格完全分隔。

我可以使用以下两次正则表达式迭代并寻找单个正则表达式解决方案来实现这一点。

s/^\s+|\s+$//g
s/\s+/ /g

样本输入:

   word1   word2 word3     word4    

期望的输出:

word1 word2 word3 word4

如果您能帮我解决这个问题,那将是不胜感激的。

4

5 回答 5

15

你可以使用类似的东西:

s/^\s+|\s+$|\s+(?=\s)//g

\s+(?=\s)将匹配字符串中间的所有空格并留下一个。

于 2013-09-26T05:34:00.950 回答
5

在 Javascript 中,字符串原型有两种方法可以管理它:

str.trim().replace(/\s+/g, ' ')

str.trim()将删除前导和尾随空格

str.replace(regex, replacement)将返回一个新字符串(对 original 无损str),regex将与提供的字符串进行比较,匹配的第一个实例将替换为replacement,然后返回整个新字符串。

需要注意的重要事项:的第一个参数.replace不应该用引号封装。正则表达式用斜杠 ( /regex/) 分隔,然后g附加以表示全局替换(每个匹配的实例),而不是仅仅替换基于lastIndex(最初为 0,给出第一个实例)的第一个或下一个实例。您可以阅读更多关于lastIndex我在提供的第二个链接中提到的所有内容。

例子:

var str = '  1 2  3   4  '
function trimReplace(str){
   newStr = str.trim().replace(/\s+/g, ' ');
   console.log(newStr);
}
trimReplace(str)

在你的控制台中试试这个: ' 1 2 3 4 '.trim().replace(/\s+/g, ' ')

“1 2 3 4”

_

正则表达式:kleene 运算符将帮助您了解用于匹配多个空格的正则表达式

正则表达式:关于正则表达式和 /g 标志的有用指南

谷歌:MDN string.protoype.trim()

谷歌:MDN string.prototype.replace()

于 2016-07-14T19:01:47.497 回答
3

使用awk

echo "   word1   word2 word3     word4  " | awk '{$1=$1}1'
word1 word2 word3 word4

$1=$1是一个把所有东西都集中起来的技巧。

你甚至可以使用

awk '$1=$1' file

但是如果第一个字段是0或者0.0它将失败

于 2013-09-26T05:47:39.810 回答
2

这可能对您有用(GNU sed):

sed -r 's/((^)\s*(\S))|((\S)\s*($))|(\s)\s*/\2\3\5\6\7/g' file

或者简单地说:

sed -r 's/(^\s*(\S))|((\S)\s*$)|(\s)\s*/\2\4\5/g file
于 2013-09-26T06:14:36.977 回答
0

如果您在 UNIX 上,您可以利用 shell 的分词功能。使用下面的命令替换的 Bash 示例

STR="   word1   word2 word3     word4  "
z=$(echo $STR)
echo "$z"
word1 word2 word3 word4
于 2013-09-26T06:49:43.780 回答