-2

我有一个正则表达式,谁能解释一下它的作用?

正则表达式

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

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

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

4

3 回答 3

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替换字符串($&包含整个匹配项),则不需要外括号。

于 2013-10-05T12:12:11.943 回答
0

不要试图通过使用正则表达式来解决所有问题。

正则表达式用于匹配,而不是修复非文本编码为文本的格式。

如果您想以不同的方式格式化数字,请提取它们并使用格式字符串在字符处理级别重新格式化它们。那只是一个丑陋的黑客

可以使用正则表达式来查找文本中的数字,例如,\d{4,}但是尝试使用正则表达式进行实际格式化是一种疯狂的滥用。

于 2013-10-05T12:29:03.563 回答
0

正则表达式(\d{1,3}(?=(?:\d\d\d)+(?!\d)))匹配任何 1-3 位数字 ( (\d{1,3}),后跟 3 位数字的倍数 ( (?:\d\d\d)+),后面没有另一个数字 ( (?!\d))。它用"$1 ". $1被第一个捕获组替换。它背后的空间是……一个空间。

有关不同语法的更多信息,请参阅mdn 上的正则表达式。

如果您想用逗号而不是空格分隔数字,则需要将其替换为"$1,"

于 2013-10-05T12:10:41.293 回答