Javascript 正则表达式匹配所有空格,但两侧都有单词的单个空格除外
到目前为止,我已经做到了: 1) 运行regexJavascript 正则表达式匹配所有空格,但两侧都有单词的单个空格除外,javascript,regex,Javascript,Regex,到目前为止,我已经做到了: 1) 运行regex//g以匹配所有空格 2) 运行对regex/\b()\b/g的新调用,以匹配需要排除的空格 现在我需要它们都融合在一个声明中。除第二个返回的空格外的所有空格。有什么帮助吗 用于测试的实时正则表达式: 编辑:虽然已经有了好的答案,但我发现尝试将“单词”与\b或\b匹配并不总是一个好主意,因为许多可打印的字符(如点和引号)在正则表达式中不被视为单词。另一个问题是,当您在DOM节点中循环时,有时会遇到内联样式标记,如,它也应该算作单词的开头/结尾,但#
//g
以匹配所有空格
2) 运行对regex/\b()\b/g
的新调用,以匹配需要排除的空格
现在我需要它们都融合在一个声明中。除第二个返回的空格外的所有空格。有什么帮助吗
用于测试的实时正则表达式:
编辑:虽然已经有了好的答案,但我发现尝试将“单词”与\b
或\b
匹配并不总是一个好主意,因为许多可打印的字符(如点和引号)在正则表达式中不被视为单词。另一个问题是,当您在DOM节点中循环时,有时会遇到内联样式标记,如
,它也应该算作单词的开头/结尾,但#text节点刚好在标记之前结束。因此,您可能还希望在正则表达式中包含字符串的开始和结束。对于任何希望解决这些问题的人,我最终得到了以下正则表达式:
/(\S|^)( )(?=\S|$)/g
这使用\S
(非空白),包含字符串的开始/结束,并应用组进行替换。替换JS如下所示:
yourTextNode.replace(/(\S|^)( )(?=\S|$)/g, '$1'+ yourreplacement)
要匹配
字符,可以使用(\u00A0)
而不是()
希望这能有所帮助。您可以使用消极前瞻:
您可以使用负前瞻:
无需任何查看,您可以将此正则表达式与
\B
一起使用,并进行替换:
\B +| +\B
\B
断言\B不匹配的位置
上面匹配前面或后面有
\B
的空格,无需任何环顾。您可以将此正则表达式与\B
一起使用,并进行替换:
\B +| +\B
\B
断言\B不匹配的位置
上面匹配前面或后面有
\B
的空格,是吗?是的!就这样。谢谢。你是说?是的!就这样。谢谢你,谢谢你的另一种方法。与消极前瞻相比,这种性能如何?这肯定比使用前瞻更快。您可以在regex101站点上选择FLAVOR作为php,并且看不到要执行的任何步骤。这一个步骤更少。谢谢你的另一个方法。与消极前瞻相比,这种性能如何?这肯定比使用前瞻更快。您可以在regex101站点上选择FLAVOR作为php,并且看不到要执行的任何步骤。这一步走得少。