【发布时间】:2020-09-22 00:41:50
【问题描述】:
我有一个包含数字和运算符符号的字符串,例如:99*8998+-999
我需要在运算符和相邻数字之间留一个空格,如下所示:99 * 8998 +- 999
我尝试了 JavaScript replaceAll 和 regex:/(\d+)([/*+-]+)(\d*)/g
但是这个正则表达式可以正常工作,直到字符串中没有不相邻的运算符符号。
例如参考以下工作和非工作条件。
"998998+999".replaceAll(/(\d+)([/*+-]+)(\d*)/g, "$1 $2 $3")
=> "998998 + 999" // Works as expected
"998998+-999".replaceAll(/(\d+)([/*+-]+)(\d*)/g, "$1 $2 $3")
=> "998998 +- 999" // Works as expected
"99*8998+-999".replaceAll(/(\d+)([/*+-]+)(\d*)/g, "$1 $2 $3")
=> "99 * 8998+-999" // Does not works as expected. Expected: "99 * 8998 +- 999"
即使带有global 标志,正则表达式似乎在第一次匹配后返回而没有捕获下一个匹配。
可能出了什么问题?
【问题讨论】:
-
您可以在正向前瞻中更改最后一组
(\d+)([\/*+-]+)(?=\d)regex101.com/r/v53RVq/1 -
也许只是
.replace(/\s*([\/*+-]+)\s*/g, " $1 ") -
尾随的
(\d*)没有多大意义,因为该部分无论如何都会匹配,还不如把它去掉? -
谢谢你们,只是好奇为什么我的初始正则表达式没有捕获多个匹配项?还是根本没有匹配?
标签: javascript regex