Javascript 当我们将数字格式化为US格式时,如何将两个正则表达式合并为一个正则表达式
我想将两个正则表达式合并为一个正则表达式,但我不知道在我的例子中如何实现。 所以,我想做下一件事:将该格式编号转换为US格式,只需为1000添加逗号,如1000等等。(我知道Javascript 当我们将数字格式化为US格式时,如何将两个正则表达式合并为一个正则表达式,javascript,regex,typescript,Javascript,Regex,Typescript,我想将两个正则表达式合并为一个正则表达式,但我不知道在我的例子中如何实现。 所以,我想做下一件事:将该格式编号转换为US格式,只需为1000添加逗号,如1000等等。(我知道tolocalString('en-US')和Intl.NumberFormat.prototype.format,但这些不适合我的情况)。 对于使用正则表达式进行操作,我尝试了以下表达式:/\d(?=(\d{3})+\)/g,它工作得很好,但是只有当我们的数字包含点时(例如1000.23),但如果没有点,当前正则表达式将无
tolocalString('en-US')
和Intl.NumberFormat.prototype.format
,但这些不适合我的情况)。
对于使用正则表达式进行操作,我尝试了以下表达式:/\d(?=(\d{3})+\)/g
,它工作得很好,但是只有当我们的数字包含点时(例如1000.23
),但如果没有点,当前正则表达式将无法工作。
(证据:)
还有另一个正则表达式,我必须使我的函数正常工作:/\d(?=(\d{3})+$)/g
,但它只有在我们没有点的时候才能正常工作。如果我们有点,它将用逗号替换浮点或小数部分,这不是符合我要求的正确行为。(对于1000.12345678,我的号码类似于“1000.12345678”)。但如果没有数字上的点,一切都会很好。
(证据:)
因此,对于我的情况,我创建了一个函数来检查:
如果number有点,我使用第一个正则表达式,如果没有,我使用第二个:
const formatNumberToUSFormat = (numberToFormat: number):string => {
const stringNumber = numberToFormat.toString()
return stringNumber.match(/\./g) ?
stringNumber.replace(/\d(?=(\d{3})+\.)/g, '$&,') :
stringNumber.replace(/\d(?=(\d{3})+$)/g, '$&,')
}
我的主要问题是——在我的例子中,如何将两个正则表达式组合在一起,从而避免不必要的点检查等等。
提前感谢。因为只有(?=…)后跟表达式,而前面没有“-可以反转字符串以正确使用”后跟“,如下所示:
const num='1234567890.12345';
const result=[…[…num]//销毁字符串
.reverse().join(“”)//反转原始字符串
.replace(/(?:\d+\)?(\d{3}(?=\d))/g,'$&')]
.reverse().join(“”);//将结果恢复正常
控制台日志(结果)来自地狱的代码>Regexp,但它可以工作)
原始答案:检查下一个正则表达式(?:(?Try(\d)(\d{3})(\.\d+)
。你可以在正则表达式中使用
,它起到布尔函数的作用,或者你需要可变长度的数字吗?@难以忍受的亮度对大数字不起作用:是的,因此我问你是否需要可变长度的数字。
const num = '1234567890.123456';
const result = num.replace(new RegExp('\\B(?=(\\d{3})+'+(~num.indexOf('.')?'\\.':'$')+')','g'),',');
console.log(result);