Angular-TypeScript中字符串实例化RegExp对象失效问题咨询
问题原因与解决方案
这是正则构造函数使用中很常见的误区,问题出在两个关键细节上:
1. 多余的正则分隔符 /
当你用字面量写正则时,/.../是JavaScript/TypeScript用来标识正则表达式的语法符号,但当用字符串传入RegExp构造函数时,绝对不能包含这两个斜杠——它们会被当成正则规则的一部分去匹配,直接导致你的校验逻辑完全偏离预期。
2. 字符串中的转义字符需要双重转义
在字符串语境里,反斜杠\本身是转义符,所以如果你的正则里需要匹配[这个字符(原正则里的\[是为了转义左方括号),在字符串中必须写成\\[:第一个反斜杠用来告诉字符串解析器“后面的反斜杠是普通字符”,第二个反斜杠才是正则规则里的转义符。
正确的代码示例
// 修正后的字符串正则定义(去掉首尾/,转义符改为双重) private checkReg: string = '^([0|\\[+][0-9]{0,5})?([1-9][0-9]{0,15})$'; // 实例化RegExp对象 this.checkRegex = new RegExp(this.checkReg);
额外补充
如果你的正则需要添加修饰符(比如全局匹配g、忽略大小写i),可以作为RegExp构造函数的第二个参数传入,示例如下:
// 添加全局匹配修饰符g this.checkRegex = new RegExp(this.checkReg, 'g');
修正后的代码会和你用字面量创建的正则效果完全一致,你可以测试验证一下。
内容的提问来源于stack exchange,提问作者Gautam
相关产品推荐
相关产品推荐

