JavaScript中new RegExp与字面量正则.test()的结果差异问题
正则字面量与RegExp构造函数结果不同的原因及修复方案
核心问题分析
你遇到的差异来自两个关键错误:
- 多余的首尾斜杠:正则字面量的
/是语法标记,不属于正则表达式本身的匹配内容。但你用new RegExp()时,把/写进了字符串参数里,这会让正则试图匹配以/开头且以/结尾的字符串,而你的测试值TTest90()没有这两个符号,自然返回false。 - 转义字符处理错误:在JavaScript字符串中,单个
\是转义符,要表示正则里的字面量\,必须写成\\。你原字符串里的\-会被解析成普通的-,导致正则中特殊字符的范围定义出现偏差。
修复后的代码
const value = 'TTest90()'; // 去掉首尾斜杠,同时把单个反斜杠改为双重转义 const pattern = '^(?=(.*[a-z]){3,})(?=(.*[A-Z]){2,})(?=(.*[0-9]){2,})(?=(.*[!@#$%^&*()\\-_+?.]){2,}).{8,}$'; const regex = new RegExp(pattern); const secondApproach = regex.test(value); // 现在返回true,与字面量方式结果一致
内容的提问来源于stack exchange,提问作者RedoColor
相关产品推荐
相关产品推荐

