JavaScript动态拼接正则调用regex.exec()报错的问题排查
问题解决:动态拼接正则表达式的正确写法
错误原因分析
第一个错误(TypeError: regEx.exec is not a function)
你拼接出来的regEx是字符串(比如"/(.*)\d+(.*)/gi"),而非正则表达式对象。只有正则对象具备exec()方法,字符串没有该方法,因此触发报错。第二个错误(ReferenceError: Regex is not defined)
JavaScript中创建正则对象的构造函数是RegExp(注意大小写,末尾为p而非x),你写错了构造函数名称,所以提示未定义。
正确实现代码
var text = "ui1pu"; var regExParameter = '\\d+'; // 正则中的\d在字符串里要写双反斜杠转义 var regEx = new RegExp('(.*)' + regExParameter + '(.*)', 'gi'); var matches = regEx.exec(text); if(matches && matches[1]) { var str1 = matches[1]; var str2 = matches[2]; var newStr = str1 + str2; console.log(newStr); // 输出:uipu }
关键注意事项
- 避免字符串拼接带斜杠的正则:必须通过
new RegExp()构造正则对象,第一个参数是匹配模式(无需包裹/),第二个参数是正则标志(如g全局匹配、i忽略大小写),需单独传入。 - 转义字符处理:若正则模式包含特殊转义字符(如
\d、\w),在字符串中需写双反斜杠\\。因为JavaScript字符串会先解析一次转义,将\\转换为\,最终传递给RegExp的才是正确的正则转义字符。
内容的提问来源于stack exchange,提问作者SL5net
相关产品推荐
相关产品推荐

