Ave*_*koz 5 javascript regex typescript
我想把两个正则表达式合二为一,但我不知道如何在我的情况下做到这一点.所以,我想做下一件事:格式化为US格式的函数,只需添加1000的逗号,就像1000等等.(我知道toLocaleString('en-US'),Intl.NumberFormat.prototype.format但这些不适合我的情况).为了使用正则表达式,我尝试了这个表达式:/\d(?=(\d{3})+\.)/g它运行良好,但只有当我们的数字包含点(例如1000.23),但如果没有点,则当前的正则表达式将不起作用.(证明: https ://regex101.com/r/93O0gJ/1)
还有另一个正则表达式,我必须使我的功能正常工作:/\d(?=(\d{3})+$)/g但它只有在我们根本没有点时才能正常工作.如果我们有点,它将用逗号替换浮点数或小数部分,并且它不符合我的要求.(对于编号1000.12345678,我的编号类似于"1000.12,345,678").但是没有数字点,一切都运作良好.(证明:https://regex101.com/r/BHikK7/1)
所以,对于我的情况,我创建了一个函数来检查:如果数字有点,我使用第一个正则表达式,如果没有,我使用第二个:
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, '$&,')
}
Run Code Online (Sandbox Code Playgroud)
我的主要问题 - 如何在我的情况下将两个正则表达式合二为一,以避免对点进行不必要的检查等等.提前致谢.
由于只有 (?=...) '后跟' 表达式而没有 '先于' - 您可以反转字符串以便正确使用 '后跟' ,如下所示:
const num = '1234567890.12345';
const result = [...[...num] // destructing the string
.reverse().join('') // reversing the original string
.replace(/(?:\d+\.)?(\d{3}(?=\d))/g,'$&,')]
.reverse().join(''); // reversing the result back to normal
console.log(result);Run Code Online (Sandbox Code Playgroud)
但这种方法远非最优!
如果您有大量数据需要处理,请不要使用它!