5

我也将其视为+$。

我在用

$(this).text( $(this).text().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,") );

将 10000 转换为 10,000 等。

我想我理解其他一切:

  • (\d) - 查找号码
  • (?=\d{3}) - 如果后跟 3 个数字
  • '+' - 第一次找到后不要停止
  • (?!\d) - 从最后一个数字开始?
  • /g - 整个字符串
  • ,"$1," - 用自我和逗号替换数字
4

2 回答 2

7

我认为你有点误读了它:

  • (?=\d{3}) - 如果后跟 3 个数字

请注意,正则表达式实际上是:

(?=(\d{3})+

即你错过了一个公开的paren。以下全部内容:

(\d{3})+(?!\d)

在 内(?= ... ),这是一个零宽度的前瞻断言——这是一种很好的说法,里面的东西应该遵循我们迄今为止匹配的内容,但我们实际上并没有消费它。

(?!\d)说一个(\d即数字)不应该跟随,所以总共:

  • (\d)找到并捕获一个数字。
  • (?=(\d{3})+(?!\d))断言应该跟随一组或多组三位数,但它们后面不应有另一个数字。

我们替换为"$1,",即捕获的第一个数字和一个逗号。

结果,我们将逗号放在后面有三位数的倍数的数字之后,这是一种很好的说法,我们将逗号添加为千位分隔符!

于 2012-07-25T12:01:53.687 回答
1

?!表示Negative lookahead,它用于匹配未跟随其他内容的内容,在您的情况下为数字

于 2012-07-25T12:01:08.233 回答