问题描述
你好! 找了一天多还是没找到答案,所以才来问我的问题!
说明: 由于 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)