'12345678967676742324234'.replace(/(?<=^\d{3}(\d{4})*)/g, ' ') 上面那个在长度为3+4n的情况下会在末尾也加空格,如果不需要则改为下面这个 '1231234'.replace(/(?<=^\d{3}(\d{4})*)(?!$)/g, ' ') 补充 以上用到了后行断言,查了一下目前发现浏览器兼容性不是太好,见https://caniuse.com/#feat=js-... 考虑兼容性的话建议选用其他方案? v8引擎有实现这个功能,如果是在nodejs上跑的话应该是没问题的 在stackoverflow上看后行断言兼容性问题时有人提到某些场景下可以用先行断言代替 这里实现如下 var str = '12345678' str.replace(new RegExp(`(?=(\\d{4})*\\d{${(str.length-3)%4||4}}$)`,'g'), ' ') 看起来有点麻烦... 一个更麻烦的笨办法 '1234567890123'.replace(/\d/g, (match, offset, s) => (offset++)%4==2&&s.length-offset?match+' ':match) 应该是最后一次补充 其实不用后行断言也可以很简单 "123123456789".replace(/((?:^|\d)\d{3})(?!$)/g, '$1 ') 看来还是要多学习一个
const g = /^\d{3}|\d{1,4}/g; const matched = input.match(g); return matched ? matched.join(' '): input;
上面那个在长度为3+4n的情况下会在末尾也加空格,如果不需要则改为下面这个
补充
以上用到了后行断言,查了一下目前发现浏览器兼容性不是太好,见https://caniuse.com/#feat=js-...
考虑兼容性的话建议选用其他方案?
v8引擎有实现这个功能,如果是在nodejs上跑的话应该是没问题的
在stackoverflow上看后行断言兼容性问题时有人提到某些场景下可以用先行断言代替
这里实现如下
看起来有点麻烦...
一个更麻烦的笨办法
应该是最后一次补充
其实不用后行断言也可以很简单
看来还是要多学习一个