正则表达式:每 3 位放置一个空格而不使用“”

问题描述

你好! 找了一天多还是没找到答案,所以才来问我的问题!

说明: 由于 discord 机器人允许使用许多功能(Atlas),我创建了一个游戏,其中一个是我将要讨论的:替换。我想要做的是使用正则表达式,每三位数放一个空格来格式化数字,如下所示:

基数:

25
321
54500
78545515201

格式化后:

25
321
54 500
78 545 515 201

但是在替换部分,空格“ ”从前后修剪了,所以我不能做$1 。但是,如果我执行 $1 $2,则计算两个参数之间的空格。 所以我想要做的是使用替换来格式化我的数字 $1 $2 以便计算空格。 如果有人有解决方案,我真的很感谢你!

编辑:这里是关于替换功能链接https://atlas.bot/documentation/tags/replace

解决方法

您可以使用一个空的捕获组来断言一个没有字符捕获的位置,以便您的替换可以是 $1 $2

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

这是在 JS 中:

https://regex101.com/r/virtsL/1/

但它也兼容 PHP (PCRE)、Python 和 Java。

归因:正则表达式最初来自 https://coderwall.com/p/uccfpq/formatting-currency-via-regular-expression,我刚刚添加了空捕获组。


根据您的评论,这是您尝试的工作版本;稍作修改:

(\d)()(?=(\d\d\d)+(\D|$))

https://regex101.com/r/McrHgj/1/

,

const inputStr = `
25
321
54500
78545515201
`

const res = inputStr.replace(/(?<=[0-9])(?=(?:[0-9]{3})+(?![0-9]))/g," ")
console.log(res)