【问题标题】:JavaScript or Notepad++ regular expression to add thousands separator to arbitrary textJavaScript 或 Notepad++ 正则表达式为任意文本添加千位分隔符
【发布时间】:2013-08-16 12:35:36
【问题描述】:

作为可视化的一部分,我想为字符串中的任何数字(连续的数字字符串)添加数千个分隔符。它不需要考虑数字的上下文,例如

1234e+56789 Nokia 3210s cost $123456.7890 and my phone number is 123-4567-89012.

变成

1,234e+56,789 Nokia 3,210s cost $123,456.7,890 and my phone number is 123-4,567-89,012.

我知道我可以反转字符串,将 \d{3}(?=\d) 替换为 $&, 并再次反转它,但是有没有办法只使用正则表达式(最好只有一个)?

【问题讨论】:

  • 看起来 Notepad++ 不支持正向前瞻...所以最好写一个小脚本。
  • @epascarello 确实如此。确保更新到 NP++ 6。
  • 啊我坐在 5.X :)

标签: javascript regex notepad++


【解决方案1】:

这与您的尝试几乎相同,只是颠倒过来并带有量词:

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

并将其替换为$&,

(?:\d{3})+ 确保后面有 3 位数字的倍数,(?!\d) 然后确保后面没有第四位或第五位数字。

如果您想在 Notepad++ 中使用它,请确保升级到版本 6。

请注意,在 Notepad++ 中,您也可以使用后视:

(?<=\d)(?=(?:\d{3})+(?!\d))

并将其替换为,

【讨论】:

  • 也感谢您的解释!
【解决方案2】:

你可以使用这个表达式:

((?<=\d)\d{3}(?=\D|(?:\d{3})*(?:\D|$)))

并替换为,$1

lookbehind 确保在我们匹配的 3 位数字之前有一个数字。

我们匹配的 3 位数字是您要在前面加上逗号的“千”。

前瞻确保后面有一个非数字或一组三元组数字。

【讨论】:

  • 谢谢。正如 m.buettner 所说,后视需要 Notepad++ 6。
  • @Gnubie 是的,我不知道您使用的是早期版本。反正他的表情比我好:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
相关资源
最近更新 更多