正则替换数字后特殊字符为点时数字也被替换的问题如何解决
问题原因
你当前使用的正则/\d+(.)/g的完整匹配内容为「连续数字 + 数字后的第一个任意字符」,replace方法默认会将全部匹配到的内容替换为指定值,因此数字也会被连带替换为.,不符合预期。
修正方案
方案1:捕获组保留数字(兼容性最好)
将连续数字部分也加入捕获组,替换时通过$1引用捕获到的数字内容,仅将后续字符替换为.:
const time = "17:34:12:p. m."; const output = time.replace(/(\d+)(.)/g, '$1.'); // 预期输出 "17.34.12.p. m." console.log(output);
方案2:正向后行断言(写法更简洁)
使用零宽正向后行断言匹配「数字之后的字符」,此时正则仅匹配数字后的任意字符,不会将数字纳入匹配结果,直接替换即可:
const time = "17:34:12:p. m."; const output = time.replace(/(?<=\d+)./g, '.'); // 预期输出 "17.34.12.p. m." console.log(output);
注:正向后行断言为ES2018新增特性,目前所有主流现代浏览器、Node.js 10+版本均已支持。
内容的提问来源于stack exchange,提问作者user12023283
相关产品推荐
相关产品推荐

