正则表达式替换为','

时间:2013-10-05 09:38:49

标签: javascript regex

我有一个RegExp,有人可以解释它究竟是做什么的吗?

正则表达式

b=b.replace(/(\d{1,3}(?=(?:\d\d\d)+(?!\d)))/g,"$1 ") 

我认为它正在替换为空格('')

如果我是对的,我想用逗号(,)代替空格('')替换它。

3 个答案:

答案 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进行实际格式设置是一种疯狂的滥用行为。