如何在JavaScript中测试字符串形式的正则表达式?
搞定正则匹配问题!
嘿,你的问题根源在于字符串形式的正则表达式写法错了,主要有两个坑:
- 用字符串定义正则时,不需要加正则字面量的
/分隔符 - JS字符串里的转义符
\必须额外转义一次,不然会被当成普通字符处理
两种正确的实现方式:
方式1:直接用正则字面量(推荐,更简洁)
如果不需要动态生成正则表达式,直接用字面量形式是最简单的:
var re = /^\d{7,15}$/; var str1 = '12345678'; var m1 = str1.match(re); console.log(m1); // 输出 ["12345678"] var t1 = re.test(str1); console.log(t1); // 输出 true
方式2:用RegExp构造函数处理字符串
如果必须用字符串来存储正则规则,记得去掉前后的/,同时把\d改成\\d(因为字符串里的\需要转义):
var reStr = '^\\d{7,15}$'; // 移除/分隔符,转义\字符 var regex1 = new RegExp(reStr); var str1 = '12345678'; var m1 = str1.match(regex1); console.log(m1); // 输出 ["12345678"] var t1 = regex1.test(str1); console.log(t1); // 输出 true
为啥原来的代码失效?
你原来写的'/^\d{7,15}$/'会被JS解析成/^d{7,15}$/——因为字符串里的\d没有转义,直接变成了普通的d,再加上前后的/,你的正则其实是在匹配以/开头、中间是7-15个d、最后以/结尾的字符串,当然匹配不上纯数字的12345678啦!
内容的提问来源于stack exchange,提问作者Simone Bonelli
相关产品推荐
相关产品推荐

