为何匹配日期格式的正则表达式在JScript中无法生效?
解决JScript中正则表达式匹配日期格式的问题
我来帮你搞定这个JScript里的正则问题!你遇到的核心问题是正则表达式的写法不符合JScript构造函数的要求,导致匹配失败。
问题根源
你把正则表达式写成了带首尾斜杠/的字符串("/([12]\d{3}...)$/"),然后传给new RegExp()构造函数。但JScript中,用构造函数创建正则时,字符串里不能包含首尾的斜杠——这些斜杠是正则字面量的语法标识,不是正则内容的一部分,会被当成匹配字符去查找,自然匹配不上目标日期字符串。
两种正确的写法
1. 正则字面量形式(推荐)
直接用/正则内容/的字面量写法,和标准JavaScript语法一致,JScript完全支持,还不用处理转义问题:
// 直接用字面量定义正则,不需要引号和外层斜杠 var regexpattern = /([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]))T(00|[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])$/; var str = "2018-02-28T17:05:10"; var res = regexpattern.test(str); // 此时res会返回true
2. RegExp构造函数形式
如果一定要用构造函数,需要去掉字符串首尾的斜杠,同时注意转义字符要写双反斜杠(因为字符串会先解析一次转义):
// 去掉外层斜杠,\d要写成\\d var pattern = "([12]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01]))T(00|[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])$"; var regexpattern = new RegExp(pattern); var str = "2018-02-28T17:05:10"; var res = regexpattern.test(str); // 同样返回true
补充说明
你的正则本身是完全正确的,用来匹配YYYY-MM-DDTHH:mm:ss格式的日期时间没有问题,只是在JScript的正则写法上踩了小坑。优先推荐字面量写法,更简洁也不容易出错。
内容的提问来源于stack exchange,提问作者fazlook1
相关产品推荐
相关产品推荐

