字符、符号或数字前后的空格;但是,不是介于两者之间
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)
我发现另一个答案更具可读性,尤其是当我想到可维护性时。以上是关于字符、符号或数字前后的空格;但是,不是介于两者之间的主要内容,如果未能解决你的问题,请参考以下文章