我有一个RegExp,有人可以解释它究竟是做什么的吗?
正则表达式
b=b.replace(/(\d{1,3}(?=(?:\d\d\d)+(?!\d)))/g,"$1 ")
我认为它正在替换为空格('')
如果我是对的,我想用逗号(,)代替空格('')替换它。
答案 0 :(得分:1)
要解释正则表达式,让我们分解它:
( # Match and capture in group number 1:
\d{1,3} # one to three digits (as many as possible),
(?= # but only if it's possible to match the following afterwards:
(?: # A (non-capturing) group containing
\d\d\d # exactly three digits
)+ # once or more (so, three/six/nine/twelve/... digits)
(?!\d) # but only if there are no further digits ahead.
) # End of (?=...) lookahead assertion
) # End of capturing group
实际上,如果您使用$&
代替$1
替换字符串($&
包含整个匹配项),则不需要使用外括号。
答案 1 :(得分:0)
正则表达式(\d{1,3}(?=(?:\d\d\d)+(?!\d)))
匹配任意1-3个数字((\d{1,3}
),后跟3个数字的倍数((?:\d\d\d)+
),后面跟不是另一个数字({ {1}})。它将其替换为(?!\d)
。 "$1 "
被第一个捕获组取代。它背后的空间是......一个空间。
有关不同语法的详细信息,请参阅regexpressions on mdn。
如果您想使用逗号而不是空格分隔数字,则需要将其替换为$1
。
答案 2 :(得分:0)
请勿尝试使用正则表达式来解决所有问题。
正则表达式适用于匹配,而不是用于修复非文本编码的文本格式。
如果要以不同方式格式化数字,请提取它们并使用格式字符串在字符处理级别重新格式化它们。那只是一个丑陋的黑客。
可以使用正则表达式查找文本中的数字,例如\d{4,}
但尝试使用regexp进行实际格式设置是一种疯狂的滥用行为。