/^([0-9]{1,2}|100)$/和/^[0-9]{1,2}|100$/为什么第一个不能匹配100以上的数字?另外请问若要匹配10-100应该怎么改?
/^([0-9]{1,2}|100)$/和/^[0-9]{1,2}|100$/为什么第一个不能匹配100以上的数字?另外请问若要匹配10-100应该怎么改?
() 是为了提取匹配的字符串,这些字符串可用于向后引用,所匹配的字符会存储在Matches集合里,如果是JavaScript你可以用 $1
属性来提取。
而 | 相当于程序语言中的“或”。
WOC,这里解释百度百科很细,不说了。
/^(100|[1-9][0-9])$/g
匹配 10-100
let reg = /^[1-9]\d{1}|100$/;
if( !reg.test(11) )
{
console.log('no');
}else {
console.log('yes');
}
之所以不能匹配到100,是因为没有加上全局匹配g。
修改如下:
/^([0-9]{1,2}|100)$/g
这两个的区别就是分组而已,如果获取的正则复制给一个变量,假设为X,在python中可以通过X[1]得到匹配的内容。在JavaScript中,可以通过$1获得。
匹配10-100,可以用以下正则匹配:
/100|([1-9][0-9])/g
3 回答2.5k 阅读✓ 已解决
5 回答1.8k 阅读
1 回答1.3k 阅读✓ 已解决
这个问题挺好的,有一个点是关于优先级的问题,具体关于正则可以看我的梳理,里面也提到了优先级的问题
具体来说就是,
第一个正则匹配的是,匹配一个完整字符串从头到结束,其中从头到结束之间的字符内容满足,要么是个位数,要么是2位数,要么是100,接受“前导0”(打引号是因为本质是字符串,不是数字在进行正则匹配)
而第二个正则,没有加括号,由于竖线
|
优先级低的问题,所以这个表达式本质上类似于/(^[0-9]{1,2})|(100$)/
,所以它表示的是匹配这样一个字符串(注意不是完整从头到尾的,只要里面有就可以),要么以一位或者两位数字开头,匹配获取这一位或者两位数字,要么以100结尾,匹配获取100也就是说你的第二个正则也是没办法完全匹配到100以上的,比如
199
这个字符串去用第二个做匹配,其实匹配到的是19
而不是完整的199
,甚至100
去匹配也是匹配到10
而不是100,因为竖线会短路至于匹配10到100,无非是改一下最前的那个
/^([1-9][0-9]|100)$/