Javascript正则表达式-删除单空格而不是双空格

Javascript正则表达式-删除单空格而不是双空格,javascript,regex,Javascript,Regex,我需要从字符串中删除单空格,但不能删除双空格 使用regex我已经尝试过了,但是它是无效的,我不知道如何修复它: \s+{1,1} 这就是我想要实现的目标: 原始字符串: "Okay, let ’s get star ted, Bret t " 在regex replace之后(保持双倍间距): 由于JavaScript不支持lookbehinds,我相信您必须求助于回调函数: str = str.replace(/\s+/g, function(m) { return m.

我需要从字符串中删除单空格,但不能删除双空格

使用regex我已经尝试过了,但是它是无效的,我不知道如何修复它:

\s+{1,1}
这就是我想要实现的目标:

原始字符串:

"Okay,  let ’s  get  star ted,  Bret t "
在regex replace之后(保持双倍间距):


由于JavaScript不支持lookbehinds,我相信您必须求助于回调函数:

str = str.replace(/\s+/g, function(m) {
    return m.length === 1 ? '' : m;
});
你可以用这个:

"Okay,  let ’s  get  star ted,  Bret t ".replace(/(\S)\s(\S)/g, '$1$2')
但这不会删除字符串末尾的空间,您可以通过以下方式进行修剪:

"Okay,  let ’s  get  star ted,  Bret t ".replace(/(\S)\s(\S)|\s$/g, '$1$2')

基于表达贪婪,这是一个可行的解决方案:

"Okay,  let ’s  get  star ted,  Bret t ".replace(/(\s{2,})|\s/g, '$1')
如果可能的话,它匹配两个或多个空格,替换为
$1
,实际上返回到不替换单个空格

/([^\s]\s{1}[^\s])|\s$/g
这会解决你的问题

\s
代表一个空格

^\s
不代表空格

{1}
是一个四元数,告诉数字为一


我只想补充一点:再次检查空格是否是第一个字符,或者前面是否有非空白字符,后面是否有空格<代码>“好的,让我们开始明星特德,布雷特t”。替换(/(^ |\s)\s(?!\s)/g,'1')+1对于回调解决方案,我认为您错过了
g
修饰符:)我确实错过了。谢谢那也很酷。你甚至不需要第二个捕获组<代码>\s{2}如果OP真的想只替换单个空格,那么可能必须将其更改为
\s{2,}
[^\s]
也是
\s
,而有了这个替换,它基本上是xdazz答案的第一个版本。哦,我想这只是一种说法。有些人不知道一切。我想说的是,这有一个问题,就是不能从字符串的末尾删除空格:)
/([^\s]\s{1}[^\s])|\s$/g