我们再从一个实例出发
假如我们要匹配一个ip地址,应该怎么写正则表达式呢,常见的ip地址,比如“127.0.0.123”,每位都是1-3位的数字,中间用英文句号隔开。
ok,利用前面的知识很容易写出来,“^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$”,可以看出“\d{1,3}\.”重复了3次,有一些繁琐,我们可以将“\d{1,3}\.”当作一个组,用括号扩起来,将整个组出现的次数设为3,这样“^(\d{1,3}\.){3}\d{1,3}$”
var patt=/^(\d{1,3}\.){3}\d{1,3}$/ alert( patt.test("192.168.1.233")) //返回true alert( patt.test("255.255.255.255")) //返回true alert( patt.test("999.999.999.999")) //返回true
很遗憾,这并不是一个真正的ip地址,因为ip地址每位最大为255,我们还要对每位的大小进行限制,分析如下
不超过255有3种情况
以0或1开头,后面2位0-9随意,“[01]\d?\d?”
以2开头,中间一位0-4,最后一位0-9,“2[0-4]?\d?”
以2开头,中间一位为5,最后一位0-5,“25[0-5]?”
我们将上面3种情况用或运算结合起来,所以不超过255的正则表达式为“[01]\d?\d?|2[0-4]?\d?|25[0-5]?”
将该表达式作为一个分组,后面加上英文句号,再作为一个大分组,重复3次
ip地址的正则表达式为“^(([01]\d?\d?|2[0-4]?\d?|25[0-5]?)\.){3}([01]\d?\d?|2[0-4]?\d?|25[0-5]?)$”
var patt=/^(([01]\d?\d?|2[0-4]?\d?|25[0-5]?)\.){3}([01]\d?\d?|2[0-4]?\d?|25[0-5]?)$/ alert( patt.test("127.0.0.1")) //返回true alert( patt.test("255.255.255.255")) //返回true alert( patt.test("999.999.999.999")) //返回false