正则表达式(regular expression)是一个描述字符模式的对象。ECMAScript的RegExp类表示正则表达式,而String和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数。
创建正则表达式和创建字符串类似,创建正则表达式提供了两种方法,一种是采用new运算符,另一个是采用字面量方式。
varr=newRegExp('reg');//第一个参数字符串
varr=newRegExp('reg','ig');//第二个参数可选模式修饰符
//i忽略大小写;g全局匹配;m多行匹配;
varr=/reg/;//直接用两个反斜杠
varr=/reg/ig;//在第二个斜杠后面加上模式修饰
RegExp对象包含两个方法:test()和exec(),功能基本相似,用于测试字符串匹配。test()方法在字符串中查找是否存在指定的正则表达式并返回布尔值,如果存在则返回true,不存在则返回false。exec()方法也用于在字符串中查找指定正则表达式,如果exec()方法执行成功,则返回包含该查找字符串的相关信息数组。如果执行失败,则返回null。
test方法在字符串中测试模式匹配,返回true或false;exec方法在字符串中执行匹配搜索,返回结果数组;
//使用new运算符的test方法
varpattern=newRegExp('test','i');//创建正则模式,不区分大小写
varstr='Thisistest!';//创建要比对的字符串
alert(pattern.test(str));//通过test()方法验证是否匹配
//使用字面量方式的test方法
varpattern=/test/i;//创建正则模式,不区分大小写
varstr='Thisistest!';
alert(pattern.test(str));
//使用一条语句实现正则匹配
alert(/test/i.test('Thisistest!'));//模式和字符串替换掉了两个变量
//使用exec返回匹配数组
varpattern=/test/i;
varstr='Thisistest!';
alert(pattern.exec(str));//匹配了返回数组,否则返回null
-
String对象提供了4个使用正则表达式的方法
|
match(pattern)
|
返回pattern中的子串或null
|
replace(pattern,replacement)
|
用replacement替换pattern
|
search(pattern)
|
返回字符串中pattern开始位置
|
split(pattern)
|
返回字符串按指定pattern拆分的数组
|
//使用match方法获取获取匹配数组
varpattern=/desk/ig;//全局搜索
varstr='ThisisaDesk!,ThatisaDesktoo';
alert(str.match(pattern));//匹配到两个Desk,Desk
alert(str.match(pattern).length);//获取数组的长度
//使用search来查找匹配数据
varpattern=/desk/ig;
varstr='ThisisaDesk!,ThatisaDesktoo';
alert(str.search(pattern));//查找到返回位置,否则返回-1
//search方法查找到即返回,也就是说无需g全局
//使用replace替换匹配到的数据
varpattern=/desk/ig;
varstr='ThisisaDesk!,ThatisaDesktoo';
alert(str.replace(pattern,'Book'));//将Desk替换成了Book
//使用split拆分成字符串数组
varpattern=//ig;
varstr='ThisisaDesk!,ThatisaDesktoo';
alert(str.split(pattern));//以空格拆开分组成数组
-
RegExp对象的静态属性
|
属 性
|
短 名
|
含 义
|
input
|
$_
|
当前被匹配的字符串
|
lastMatch
|
$&
|
最后一个匹配字符串
|
lastParen
|
$+
|
最后一对圆括号内的匹配子串
|
leftContext
|
$`(反引号)
|
最后一次匹配前的子串
|
multiline
|
$*
|
用于指定是否所有的表达式都用于多行的布尔值
|
rightContext
|
$'(单引号)
|
在上次匹配之后的子串
|
//Opera不支持input、lastMatch、lastParen和multiline属性。IE不支持multiline属性。
varpattern=/(g)oogle/;
varstr='Thisisgoogle!';
pattern.test(str);//执行一下
alert(RegExp.input);//Thisisgoogle!
alert(RegExp.leftContext);//Thisis
alert(RegExp.rightContext);//!
alert(RegExp.lastMatch);//google
alert(RegExp.lastParen);//g
alert(RegExp.multiline);//false
//RegExp.input可以改写成RegExp['$_'],依此类推。RegExp.input可以写成RegExp.$_。
-
RegExp对象的实例属性 |
global
|
Boolean值,表示g是否已设置
|
ignoreCase
|
i是否已设置
|
lastIndex
|
整数,代表下次匹配将从哪里字符位置开始
|
multiline
|
m是否已设置
|
Source
|
正则表达式的源字符串形式
|
//使用实例属性
varpattern=/google/ig;
alert(pattern.global);//true,是否全局了
alert(pattern.ignoreCase);//true,是否忽略大小写
alert(pattern.multiline);//false,是否支持换行
alert(pattern.lastIndex);//0,下次的匹配位置
alert(pattern.source);//google,正则表达式的源字符串
varpattern=/google/g;
varstr='googlegooglegoogle';
pattern.test(str);//google,匹配第一次
alert(pattern.lastIndex);//6,第二次匹配的位
元字符/元符号
|
匹配范围
|
.
|
除换行符外的任意字符
|
[a-z0-9]
|
括号中的字符集中的任意字符
|
[^a-z0-9]
|
任意不在括号中的字符集中的字符
|
d
|
数字
|
D
|
非数字,同[^0-9]相同
|
w
|
字母和数字及_
|
W
|
非字母和数字及_
|
|