经常用到的正则表达式方法有两个test()
和 exec()
一. test()
方法
正则表达式对象.test(字符串)`
参数:要匹配的字符串
返回值:匹配成功返回
true
,失败返回false
在只想知道目标字符串与某个模式是否匹配,但不需要知道其文本内容的情况下,使用这个方法非常方便。因此, test()
方法经常被用在 if
语句中。
<script type="text/javascript">
var pa = /girl/gi;
if(pa.test("厉害了我的girl")){
alert("这个女孩和你很配");
}else {
alert("你注定没有女孩去匹配");
}
</script>
二. exec()
方法
exec(字符串)
:该方法为专门为捕获组而设计的
参数:要匹配的字符串
返回值:返回的是一个数组。如果不匹配则返回
null
关于返回值数组的说明:
它确实是Array的实例。
但是这个数组有两个额外的属性:index和 input
index:表示匹配的字符串在源字符串中的索引
input:表示匹配的源字符串。
数组的第一项是与整个模式匹配的字符串,其他项是与模式中捕获组匹配的字符串
如果没有捕获组,则数组中只有第一项。关于捕获组的概念以后再说
<script type="text/javascript">
var pa = /girl/gi;
var testStr = "myGirl, yourgirl, hisgIrl";
var girls = pa.exec(testStr); //捕获
alert(girls.length + ":" + (girls instanceof Array)); //正则表达式没有捕获组,所以数组长度为1
alert(girls[0]); //第一次捕获的是 Girl
//因为我们是用的全局匹配,所以此次匹配的时候从上次匹后的位置开始继续匹配
alert(pa.exec(testStr)[0]); // girl
alert(pa.exec(testStr)[0]); // gIrl
alert(pa.exec(testStr)[0]); //继续向后没有匹配的字符串,所以返回null
// 返回null,如果继续再匹配,则会回到字符串的开始,重写开始匹配。
alert(pa.exec(testStr)[0]); // Girl
// ...开启新一轮匹配
</script>
所以我们如果想找到全部匹配的字符串,这个时候可以用循环,结束条件就是匹配结果为null
<script type="text/javascript">
var pa = /girl/gi;
var testStr = "myGirl, yourgirl, hisgIrl";
var girls;
while(girls = pa.exec(testStr)){ //如果等于null,会自动转成 false,结束。
alert(girls);
}
</script>
分组。在正则表达式中用()括起来的是捕获组。组可以嵌套。
<script type="text/javascript">
//()内的内容就是第1组(Girl),其实我们完整整个正则表达式可以看出第0组 girl(Girl)
// 将来对应着匹配结果数组的下标。
var pa = /girl(Girl)/gi;
var test = "girlGirl abdfjla Girlgirl fal girl";
var girls;
while(girls = pa.exec(test)){
//匹配之后,数组的第0个元素对应的这第0组的匹配结果,第1个元素对应着第1组的匹配结果
for (var i = 0; i < girls.length; i++) {
console.log(girls[i]);
}
console.log("-------------");
}
</script>
//最终运行结果:
girlGirl
Girl
-------------
Girlgirl
girl
------------