正则(一)

正则(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也是原子。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章