React Native运行安卓应用时Invalid regular expression报错如何解决
问题原因
React Native安卓端搭载的低版本Hermes引擎、旧版JavaScriptCore未支持ES2018新增的正则后行断言((?<=pattern))语法,你的正则中使用了该语法,引擎解析正则时直接抛出无效错误,不会生成对应业务堆栈。
你当前使用的正则核心作用是做数字输入清洗,匹配四类需要删除的内容:
- 字符串开头的小数点
- 字符串结尾的小数点
- 第一个小数点之后出现的所有多余小数点
- 所有非数字、非小数点的字符
解决方案
不要使用后行断言,直接拆分逻辑实现即可,全版本JS引擎兼容,效果和原正则完全一致,没有任何兼容风险:
// 替换原正则的replace逻辑即可,输入原始字符串,返回清洗后的合法数字串 function formatInput(str) { // 第一步:移除所有非数字、非小数点的非法字符 let result = str.replace(/[^\d.]/g, '') // 第二步:仅保留第一个小数点,删除后续所有多余小数点 const firstDotIndex = result.indexOf('.') if (firstDotIndex > -1) { result = result.slice(0, firstDotIndex + 1) + result.slice(firstDotIndex + 1).replace(/\./g, '') } // 第三步:移除开头、结尾的小数点 result = result.replace(/^\.|\.$/g, '') return result }
逻辑验证
和原正则处理结果完全对齐,测试用例:
- 输入:
.123.45.6abc.→ 输出:123.456 - 输入:
abc→ 输出:空字符串 - 输入:
123.→ 输出:123 - 输入:
.123→ 输出:123 - 输入:
12.3.4→ 输出:12.34
不要尝试找单正则的奇技淫巧写法,这类写法可读性差,后续维护成本高,拆分逻辑的写法在所有RN版本(包括0.60以下的老版本)上都能正常运行,不会再抛正则相关的语法错误。
内容的提问来源于stack exchange,提问作者user15322469
相关产品推荐
相关产品推荐

