正则(regular expression)是干什么的?
正则表达式是用来处理字符串的,它的特长在于处理复杂的字符串。
正则表达式定义的是字符串的模型(或叫模式,英文pattern),我们可以使用这个模型来去验证某个字符串(或字符串里的一部分)是否和这个模型(或叫模式)相匹配,或使用这个模型把某个字符串里和这个模型匹配的那一部分找出来。
再重述一遍:
- 1、正则定义了一个字符串的模型。
- 2、正则的第一个作用是“验证某字符串是否和这个模型相匹配”。
- 3、正则的第二个作用是“把匹配到的内容找出来”。
其实正则只是定义了一个字符串的模型,至于如何去验证字符串和查找字符串,是正则类上的方法完成的。
比如:var reg=/\d+/
;写在两个/斜杠之间,是语法规范,表示定义了一个正则对象。 \d
在正则中表示数字,+
表示出现一到多次。那这样就定义了一个出现一到多次的数字的模型。它可以和以下字符串匹配:”ab23839cd”,”a4d”、”33928”、”3490cf”、”0938FA”、”z9”
,因为这些字符串里,都出现了一到多次的数字,如果用正则类的test方法去验证它们,都会返回true。
例:
var reg=/\d+/; //相当于定义了“一个数字出现一到多次”的模型
var str=”ab23839cd”;
alert(reg.test(str)); //弹出true
这里的test方法,是正则类的方法,以字符串为参数,就是负责验证str是否符合reg定义的模式。下面再定义一个字符串:
var str2=”abcdef”;
alert(reg.test(str2));//这次弹出的是false,因为str2里,没有出现数字。
以上只是验证字符串,如果想把符合验证的字符串找出来,则就要用其它方法了,例:
alert(reg.exec(str));//弹出23839
alert(reg.exec(str2));//弹出null,因为reg和str2不匹配。
当然,我也还可以用String类的match方法来找到和reg正则相匹配的内容,例:
alert(str.match(reg));//弹出23839
exec和match,都是处理字符串功能很强大的方法,后边的章节里会有非常详细的阐述。
如果严格的匹配一到多个数字,不能出现其它字符,应该这样写:
var reg=/^\d+$/;
这个模型才表示从开头到结尾都是数字。^
表示后边出现的数字必须在开头,$
表示前面出现的数字必须出现在结尾。像^、$、\d、+
这些在正则里表示特殊含义的符号,叫“元字符”。
在正则里,不是只允许出现元字符,普通的字符也是可以出现的。在正则里出现的普通字符,就表示此字符本来的含意。比如:
var reg=/^\d8\d$/;
//这个表示匹配一个只包含三位数字,中间是8的字符串。详解:^\d
表示以任意数字开头,一个\d
表示出现一次;中间的8就表示字符8本身,后边的\d$
表示一个任意数字结尾。所以这个正则可以匹配以下这些字符串:”282”,”389”,”081”等,但不匹配”1899”,”819”,”08”这样的字符串。
在/^\d8\d$/
这个正则里,首尾的两个\d和中间的8,都表示一个字符,它们是组成正则的最基本单位,我们叫它们“原子”,\d
是原子,8也是原子。