正则表达式匹配所有空格,除了两边都有单词的单个空格

时间:2017-11-22 21:41:24

标签: javascript regex

我到目前为止:

1)运行正则表达式/ /g以匹配所有空格。

2)对正则表达式/\b( )\b/g运行新调用以匹配需要排除的空格。

现在我需要将它们融合在一起。所有空格除了第二个返回的空格。有什么帮助吗?

用于测试的实时正则表达式:https://regex101.com/r/26w2WR/1

编辑:虽然已有好的答案,但我发现尝试匹配&#34;字&#34;使用\b\B并不总是一个好主意,因为许多可打印字符(如点和引号)不会被RegEx视为单词。另一个问题是,当您循环遍历DOM节点时,有时会遇到内联样式标记,如<strong>,它们也应该只计为单词的开头/结尾,而只是 #text 节点在标签之前结束。所以你可能想要包括start&amp; RegEx中字符串的结尾也是如此。对于任何希望解决这些问题的人,我最终得到了这个RegEx:

/(\S|^)( )(?=\S|$)/g

这使用\S(不是空格),包括字符串的开头/结尾,并应用组替换能力。替换JS看起来像这样:

yourTextNode.replace(/(\S|^)( )(?=\S|$)/g, '$1'+ yourreplacement) 

要匹配&nbsp;个字符,您可以使用(\u00A0)代替( )

希望这有帮助。

2 个答案:

答案 0 :(得分:2)

您可以使用否定预测:

(?!\b \b)( )

答案 1 :(得分:1)

如果没有任何外观,您可以将此正则表达式用于\B并替换:

\B +| +\B

Updated RegEx Demo

\B断言\ b不匹配的位置

上方匹配\B

之前或之后的空格