正则表达式和RegExp
正则表达式是由字符串所组成的表达式,用于匹配、替换或者查找特定的字符串。
创建正则表达式的方法:
第一种:
Var reg = new RegExp(“pattern”);
第二种:
Var reg = /pattern/;
例1:
var re = /JavaScript rules/; #字符串中的斜杠表示这是一个正则表达式,不是其他对象类型
var str = "JavaScript rules";
if(re.test(str)){
document.writeln("I guess it does rule");
}
正则表达式的匹配过程是匹配大小写的,如果希望不区分大小写进行匹配,可以在正则表达式后面添加字母i。
还有一些其他的选项,全局匹配的g标识,全局匹配是查找与正则表达式匹配的所有字符串,而忽略正则表达式的位置。如果不实用选项g,那么只会返回一个匹配项。
多行匹配的m标识,可以使用与行相关的字符,例如^表示一行的开始,$表示一行的结束,以便在多行的字符串中进行匹配。
例2:
var re = new RegExp("JS*","ig");
var str = "cfdsJS*(YJSjs 888JS";
var resultArray = re.exec(str);
while (resultArray) {
document.writeln(resultArray[0]);
document.writeln("next match starts at " + re.lastIndex + "<br />");
resultArray = re.exec(str);
}
元字符
* 表示0次或多次,c*等同于c{0, }
+ 表示一次或多次,等同于{1,}
? 表示0次或一次,等同于{0,1}
转移字符
\s 空格符
\d 数字
\D 非数字符号
\w 任何数字或字母,等效于[A-Za-z0-9]
\W 任何非数字或字母
方括号[]
表示一个字符集合
比如:[^0-9] 和 \D作用相同都用来匹配非数字字符
脱字符 ^
^和$可以用来表示一行的开始和结束。
例1:
var regExp = /^The/i;
var str = “This is the JavaScript example”:
上面的例子中,因为匹配字符不是出现在行的开始,所以匹配不成功。
例2:
var reg = /^The/im;
var str = "This is \nthe end";
这个会匹配成功
竖杠 |
表示可选择性的匹配,下面的表达式可以匹配字母a或b:
a | b
大括号{}
表示字符重复的次数,下面的表达式可以匹配两个s:
S{2}
Regexp对象只有两个实例方法:test和exec
关于exec( )方法
手册中的解释:
用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组
rgExp.exec(str)
参数
rgExp
必选项。包含正则表达式模式和可用标志的正则表达式对象。
str
必选项。要在其中执行查找的 String 对象或字符串文字。
说明
如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现的任意一个子匹配(看下面的例1)。这相当于没有设置全局标志 (g) 的 match 方法。
如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。
exec 方法返回的数组有三个属性,分别是 input、index 和 lastIndex。Input属性包含了整个被查找的字符串。Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹配中最后一个字符的下一个位置。
使用这个函数来做匹配正则的练习:
function execReg(reg,str){
var result = reg.exec(str);
alert(result);
}
函数接受一个正则表达式参数reg和一个目标字符串参数str,执行之后会alert出正则表达式与字符串的匹配结果
/(子正则表达式1)(子正则表达式2)……/,在第二种建立正则表达式的方法中,斜杠内每个圆括号内便是一个子正则表达式或叫子匹配。
例1:
reg = /(\w)(\w)/;
str = 'blueidea';
execReg(reg,str);
bl是整个正则匹配的内容,b是第一个括号里的子正则表达式匹配的内容,l 是第二个括号里的子正则表达式的内容
Exec方法的返回值其实并不是匹配结果字符串,而是一个对象,看例2:
var reg = /b/;
var str='bbs.bblueidea.com';
execReg(reg,str);
function execReg(reg,str){
var result = reg.exec(str);
alert(typeof result);
}
结果为object。即result的类型是object。而且是一个类似数组的对象。这个对象有三个属性:index、input、result。
例3:
var reg = /(\w)(\w)(.+)/;
var str='bbs.bblueidea.com';
execReg(reg,str);
function execReg(reg,str){
var result = reg.exec(str);
document.write('index:'+result.index+'<br />'+'input:'+result.input+'<br />' );
for(i=0;i<result.length;i++){
document.write('result['+i+']:'+result[i]+'<br />')
}
}
结果如下:
index:0input:bbs.bblueidea.comresult[0]:bbs.bblueidea.comresult[1]:bresult[2]:bresult[3]:s.bblueidea.com