字符、符号或数字前后的空格;但是,不是介于两者之间

Posted

技术标签:

【中文标题】字符、符号或数字前后的空格;但是,不是介于两者之间【英文标题】:whitespace before or after characters, symbols, or numbers; but, not in-between 【发布时间】:2015-02-23 00:27:00 【问题描述】:

我正在尝试编写一个正则表达式,它在任何字符(字母、符号或数字)之前或之后选择空格,但不在由字符组成的单词之间。

例如,' abc',前面的空格会匹配;但是,在'words words words' 中,不会选择中间的任何空格。

所以在' hello world to everyone ' 中,只会选择前导和尾随空格。

奖励:如果有办法在第二个正则表达式中单独选择中间的空格,那将有很大帮助。

我要做的是,在 javascript 中,最小化句子中的空格,以便前导和尾随空格消失,单词之间的空格缩小到 1 个空格。

【问题讨论】:

但是"hello world to everyone" 没有前导/尾随空格? 我添加了一些引号以防止空格折叠。 String#trim() 应该已经这样做了 【参考方案1】:

Reference Link

var string = "    hello world     to       everyone. ";
string = string.trim().replace(/\s+/g, " ");
alert(string);

JS Fiddle

【讨论】:

感谢您解决了我的问题,而不仅仅是给了我最简单的解决方案。我不知道有修剪方法。我会再调查一下。【参考方案2】:

你想把多空间变成单空间吗?做吧:

var text="hello world  to    everyone";
text=text.trim().replace(/\s+/g," ");

document.write(text); // It will print 'hello world everyone'

【讨论】:

打印helloworldeveryone 替换值应该是一个空格,我给你修好了。【参考方案3】:

仅通过正则表达式和正则表达式

您可以通过正则表达式来做到这一点,而无需使用任何 js 内置函数,例如 trim()

> var s = '    hello    world   to    everyone   '
> s.replace(/^\s+|\s+$|\s*(\s)/g, "$1")
'hello world to everyone'

DEMO

说明:

^\s+ 匹配前导的一个或多个空格。 |\s+$ 匹配尾随空格。 |\s*(\s) 从剩余的字符串中,此正则表达式将匹配零个或多个空格并捕获最后一个空格。所以捕获的组即组索引 1 单个空格。 将所有匹配的空格替换为组索引 1 中存在的空格将为您提供所需的输出。

【讨论】:

^\s+|\s+$|\s+(\s) 我发现另一个答案更具可读性,尤其是当我想到可维护性时。

以上是关于字符、符号或数字前后的空格;但是,不是介于两者之间的主要内容,如果未能解决你的问题,请参考以下文章

从没有任何空格的字符串中提取数字[重复]

正则表达式中的应用

请问Excel中只想取数字,怎么快速去掉前后空格和tab符号?

正则表达式的与B总结

用于匹配空格或标点符号和非字母数字的正则表达式

找出两个字符串输入是不是是字谜,忽略空格、标点符号和数字