使用正则为字符串添加分隔符时,如何避免结尾出现多余分隔符?
解决正则添加分隔符后末尾多出分隔符的问题
修正后的代码方案
var myString = "abcdefghi" var result = myString.replace(/(.{3})(?=.)/g, '$1.'); console.log(result) // abc.def.ghi
原理说明
原代码的问题在于无论匹配组后面是否还有字符,都会强制添加.,导致最后一组也带上了多余分隔符。
修正后的正则里,(?=.)是正向预查规则,它要求匹配到的3个字符后面必须还有剩余字符,才会执行替换操作。最后一组3个字符后面没有后续内容,自然不会被匹配替换,也就不会在末尾多出.。
如果处理长度非3倍数的字符串(比如"abcdefgh"),这个方案也能正确输出abc.def.gh,符合预期。
另一种可选写法
也可以从字符串末尾往前匹配分界点添加分隔符,效果一致:
var result = myString.replace(/(?=(?:.{3})+$)(?!^)/g, '.');
内容的提问来源于stack exchange,提问作者Guilherme Souza
相关产品推荐
相关产品推荐

