Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式匹配所有空格,但两侧都有单词的单个空格除外_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式匹配所有空格,但两侧都有单词的单个空格除外

Javascript 正则表达式匹配所有空格,但两侧都有单词的单个空格除外,javascript,regex,Javascript,Regex,到目前为止,我已经做到了: 1) 运行regex//g以匹配所有空格 2) 运行对regex/\b()\b/g的新调用,以匹配需要排除的空格 现在我需要它们都融合在一个声明中。除第二个返回的空格外的所有空格。有什么帮助吗 用于测试的实时正则表达式: 编辑:虽然已经有了好的答案,但我发现尝试将“单词”与\b或\b匹配并不总是一个好主意,因为许多可打印的字符(如点和引号)在正则表达式中不被视为单词。另一个问题是,当您在DOM节点中循环时,有时会遇到内联样式标记,如,它也应该算作单词的开头/结尾,但#

到目前为止,我已经做到了:

1) 运行regex
//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,并且看不到要执行的任何步骤。这一步走得少。