【问题标题】:Javascript Regex - Remove single spaces NOT double spacesJavascript Regex - 删除单个空格而不是双空格
【发布时间】:2014-04-13 06:13:01
【问题描述】:

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

使用正则表达式我已经尝试过了,但是它是无效的,我不知道如何解决它:

\s+{1,1}

这就是我想要实现的目标:

原始字符串:

"Okay,  let ’s  get  star ted,  Bret t "

正则替换后(保持双倍间距):

"Okay,  let’s  get  started,  Brett"

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    由于JavaScript不支持lookbehinds,我相信你不得不可以求助于回调函数:

    str = str.replace(/\s+/g, function(m) {
        return m.length === 1 ? '' : m;
    });
    

    【讨论】:

    • +1 用于回调解决方案,我认为您错过了 g 修饰符 :)
    • 我确实做到了。谢谢!
    【解决方案2】:

    你可以用这个:

    "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')
    

    【讨论】:

    • 我只是想补充一点:D
    • 或者,检查空格是否是第一个字符,或者前面有一个非空格,并且后面没有空格。 " Okay, let ’s get star ted, Bret t ".replace(/(^|\S)\s(?!\s)/g,'$1');
    【解决方案3】:

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

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

    如果可能,它匹配两个或多个空格,替换为$1,有效地回退到用空替换单个空格。

    【讨论】:

    • 这也很酷。您甚至不需要第二个捕获组。如果 OP 真的只想替换单个空格,\s{2} 可能必须更改为 \s{2,}
    【解决方案4】:
    /([^\s]\s{1}[^\s])|\s$/g
    

    会解决你的问题

    \s 是一个空格

    ^\s 用于非空格

    {1} 是一个限定符,它告诉数字是一

    http://regex101.com/r/uO3iJ4

    【讨论】:

    • [^\s] 也是 \S,并且替换它基本上是 xdazz 答案的第一个版本。
    • 哦,我认为这只是一种说法。那里的人什么都不知道。
    • 我的意思是,这有没有从字符串末尾删除空格的问题:)