JavaScript如何用正则替换除正负号(+、-)和数字外的所有字符
问题原因
你当前使用的/\D/g正则等价于/[^\d]/g,作用是匹配所有非数字字符,负号不属于数字范畴,因此会被一并替换删除,导致最终结果丢失了开头的负号。
解决方案
仅需保留负号的场景(匹配你当前的纬度处理需求)
使用正则/(?!^-)[^\d]/g即可,该逻辑会跳过匹配字符串开头的负号,仅删除其余所有非数字字符:
const lat = "-3340Abcs" const newLat = lat.replace(/(?!^-)[^\d]/g, "") console.log(newLat) // 输出 -3340,符合预期
同时兼容正号、负号开头的场景
如果需要同时支持正号开头的数值字符串处理,调整正则为/(?!^[+-])[^\d]/g即可:
const lng = "+12147def" const newLng = lng.replace(/(?!^[+-])[^\d]/g, "") console.log(newLng) // 输出 +12147
注意:该方案仅会保留字符串开头的唯一一个正负号,中间位置出现的正负号会被正常过滤,避免生成不符合数值规范的结果。
内容的提问来源于stack exchange,提问作者Ali Raza Shaheb
相关产品推荐
相关产品推荐

