测试正则表达式

RegExp 对象包含两种方法:test()和exec(),功能基本相似,用于测试字符串匹配。


test()方法在字符串中查找是否存在指定的正则表达式并返回布尔值。存在返回true,反之返回false。


exec()方法也用于在字符串中查找指定的正则表达式,如果exec方法执行成功则返回包含查找字符串的相关信息数组。如果执行失败返回null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。我们可以看得出,在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。


但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。


例如:

var pattern = new RegExp('box','ig');

var str = 'this is a box ';

alert(pattern.test(str));

alert(pattern.test(str));

两次alert的结果你会发现第一次是true,第二次是false,为什么呢?

去w3c查一下RegExp对象还有一个lastIndex 是一个整数,标示开始下一次匹配的字符位置。

让我么在将后面的两行alert替换成:

alert(pattern.lastIndex); //0

alert(pattern.test(str));//true

alert(pattern.lastIndex);//13

alert(pattern.test(str));//false

原来加上参数gRegExp对象的lastIndex不会自动归零直到第一次匹配失败,所以会出现true和false交替出现的情况。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值