js正则表达式 match exec test,以及g模式的一些知识点
2015-01-26 11:45
471 查看
http://www.cnblogs.com/resume/archive/2012/10/30/2747210.html
关于js正则表达式的基本知识这里就不具体介绍了。这里主要讲几个方法的之间的区别。
区别:
a.match()是字符串的方法,exec()和test()是正则对象的方法.
b.match()方法和exec方法都返回数组,
test()方法返回bool,表示模式和需要匹配的字符串是否匹配,匹配成功则返回true,否则返回false.主要用于判断是否存在匹配
下面描述一下match(),exec()的具体区别,代码后面的注释是给出的结果
1.match()
match()不管是否带g(全局匹配),连续多次匹配获取的结果都一样
1.1match()不带g的匹配,
1.1.1 第一次匹配,匹配返回的结果是个数组
数组中的第0个是整个模式匹配的字符串,所以matches[0]=cat,
之后的每一项(如果有)保存着与正则表达式中的捕捉组匹配的字符串,捕捉组在符号()内
这里出现了2个捕捉组,分别为at前面的(.)和at后面的(..)
所以,matches[1]=c matches[2]=, 这里是(, )逗号与空格,两个字符
1.1.2 第二次匹配与第一次匹配结果完全一样
1.2match()带g的匹配
1.2.1第一次匹配,匹配返回的结果是个数组
带g的match匹配的数组中每个都是整个模式匹配的字符串
所以,matches[0]=cat, matches[1]=bat, matches[2]=sat, 最后都是(, )逗号与空格,两个字符
1.2.2 第二次匹配与第一次匹配结果完全一样
exec
exec(),与match()不一样,不带g时连续多次匹配获取的结果一样,而带g时在有多个匹配的情况下是不一样的
1.1exec()不带g的匹配,这个与前面的match()的不带g匹配完全一样
1.1.1 第一次匹配,匹配返回的结果是个数组
数组中的第0个是整个模式匹配的字符串,matches[0]=cat,
之后的每一项(如果有)保存着与正则表达式中的捕捉组匹配的字符串,捕捉组在符号()内
这里出现了2个捕捉组,分别为at前面的(.)和at后面的(..)
所以,matches[1]=c matches[2]=, 这里是(, )逗号与空格,两个字符
1.1.2 第二次匹配与第一次匹配结果完全一样
1.2exec()带g的匹配
1.2.1第一次匹配,匹配返回的结果是个数组,这里与match()带g的第一次匹配不一样
数组中的第0个是整个模式匹配的字符串,matches[0]=cat,
之后的每一项(如果有)保存着与正则表达式中的捕捉组匹配的字符串,捕捉组在符号()内
这里出现了2个捕捉组,分别为at前面的(.)和at后面的(..)
所以,matches[1]=c matches[2]=, 这里是(, )逗号与空格,两个字符
1.2.2 第二次匹配,匹配返回的结果也是个数组,但数组的具体信息则是继续匹配下一个字符串
数组中的第0个是整个模式匹配的字符串,matches[0]=bat,
之后的每一项(如果有)保存着与正则表达式中的捕捉组匹配的字符串,捕捉组在符号()内
这里出现了2个捕捉组,分别为at前面的(.)和at后面的(..)
所以,matches[1]=b matches[2]=, 这里是(, )逗号与空格,两个字符
解释至这里我想大家应该都明白match()和exec()的区别了。
导致这个区别的原因是由于javascript的RegExp对象中有一个属性叫lastIndex,当用exec进行操作的时候,lastIndex表示开始搜索下一个匹配项的字符位置.
当存在匹配的时候,该属性值会做改变。由于exec方法是RegExp这个对象的属性,所以这种情况只会在exec方法中出现,而不会在matches方法中出现。
若我们是在一个循环中调用RegExp的exec方法,如果在设置g(全局搜索)的情况下,得到的结果不是我们想要的,那么可以再循环的最后添加下面的代码
这样每次循环后,又会从下一个待匹配的字符串的开始处进行匹配。
关于js正则表达式的基本知识这里就不具体介绍了。这里主要讲几个方法的之间的区别。
区别:
a.match()是字符串的方法,exec()和test()是正则对象的方法.
b.match()方法和exec方法都返回数组,
test()方法返回bool,表示模式和需要匹配的字符串是否匹配,匹配成功则返回true,否则返回false.主要用于判断是否存在匹配
下面描述一下match(),exec()的具体区别,代码后面的注释是给出的结果
1.match()
var text="cat, bat, sat, fat"; var pattern = /(.)at(..)/; var matches = text.match(pattern); alert(matches[0]);//cat, alert(matches[1]);//c alert(matches[2]);//, matches = text.match(pattern); alert(matches[0]);//cat, alert(matches[1]);//c alert(matches[2]);//, ////////////////////////////////////// var text="cat, bat, sat, fat"; var pattern = /(.)at(..)/g; var matches = text.match(pattern); alert(matches[0]);//cat, alert(matches[1]);//bat, alert(matches[2]);//sat, matches = text.match(pattern); alert(matches[0]);//cat, alert(matches[1]);//bat, alert(matches[2]);//sat,
match()不管是否带g(全局匹配),连续多次匹配获取的结果都一样
1.1match()不带g的匹配,
1.1.1 第一次匹配,匹配返回的结果是个数组
数组中的第0个是整个模式匹配的字符串,所以matches[0]=cat,
之后的每一项(如果有)保存着与正则表达式中的捕捉组匹配的字符串,捕捉组在符号()内
这里出现了2个捕捉组,分别为at前面的(.)和at后面的(..)
所以,matches[1]=c matches[2]=, 这里是(, )逗号与空格,两个字符
1.1.2 第二次匹配与第一次匹配结果完全一样
1.2match()带g的匹配
1.2.1第一次匹配,匹配返回的结果是个数组
带g的match匹配的数组中每个都是整个模式匹配的字符串
所以,matches[0]=cat, matches[1]=bat, matches[2]=sat, 最后都是(, )逗号与空格,两个字符
1.2.2 第二次匹配与第一次匹配结果完全一样
exec
var text="cat, bat, sat, fat"; var pattern = /(.)at(..)/; var matches = pattern.exec(text); alert(matches[0]);//cat, alert(matches[1]);//c alert(matches[2]);//, matches = pattern.exec(text); alert(matches[0]);//cat, alert(matches[1]);//c alert(matches[2]);//, var text="cat, bat, sat, fat"; var pattern = /(.)at(..)/g; var matches = pattern.exec(text); alert(matches[0]);//cat, alert(matches[1]);//c alert(matches[2]);//, matches=pattern.exec(text); alert(matches[0]);//bat, alert(matches[1]);//b alert(matches[2]);//,
exec(),与match()不一样,不带g时连续多次匹配获取的结果一样,而带g时在有多个匹配的情况下是不一样的
1.1exec()不带g的匹配,这个与前面的match()的不带g匹配完全一样
1.1.1 第一次匹配,匹配返回的结果是个数组
数组中的第0个是整个模式匹配的字符串,matches[0]=cat,
之后的每一项(如果有)保存着与正则表达式中的捕捉组匹配的字符串,捕捉组在符号()内
这里出现了2个捕捉组,分别为at前面的(.)和at后面的(..)
所以,matches[1]=c matches[2]=, 这里是(, )逗号与空格,两个字符
1.1.2 第二次匹配与第一次匹配结果完全一样
1.2exec()带g的匹配
1.2.1第一次匹配,匹配返回的结果是个数组,这里与match()带g的第一次匹配不一样
数组中的第0个是整个模式匹配的字符串,matches[0]=cat,
之后的每一项(如果有)保存着与正则表达式中的捕捉组匹配的字符串,捕捉组在符号()内
这里出现了2个捕捉组,分别为at前面的(.)和at后面的(..)
所以,matches[1]=c matches[2]=, 这里是(, )逗号与空格,两个字符
1.2.2 第二次匹配,匹配返回的结果也是个数组,但数组的具体信息则是继续匹配下一个字符串
数组中的第0个是整个模式匹配的字符串,matches[0]=bat,
之后的每一项(如果有)保存着与正则表达式中的捕捉组匹配的字符串,捕捉组在符号()内
这里出现了2个捕捉组,分别为at前面的(.)和at后面的(..)
所以,matches[1]=b matches[2]=, 这里是(, )逗号与空格,两个字符
解释至这里我想大家应该都明白match()和exec()的区别了。
导致这个区别的原因是由于javascript的RegExp对象中有一个属性叫lastIndex,当用exec进行操作的时候,lastIndex表示开始搜索下一个匹配项的字符位置.
当存在匹配的时候,该属性值会做改变。由于exec方法是RegExp这个对象的属性,所以这种情况只会在exec方法中出现,而不会在matches方法中出现。
若我们是在一个循环中调用RegExp的exec方法,如果在设置g(全局搜索)的情况下,得到的结果不是我们想要的,那么可以再循环的最后添加下面的代码
1 pattern.lastIndex=0
这样每次循环后,又会从下一个待匹配的字符串的开始处进行匹配。
相关文章推荐
- js正则表达式中test,exec,match方法的区别说明
- js 正则表达式test、exec、match
- js正则表达式中test,exec,match方法的区别说明
- js正则表达式中test,exec,match方法的区别
- js的正则表达式 test, exec, match, replace
- js 正则表达式 RegExp.exec RgeExp.test String.match
- js正则表达式中test,exec,match方法的区别说明
- Js 正则表达式对象(方法:exec、test、match、search)
- js正则表达式中test,exec,match方法的区别说明
- JavaScript 正则表达式的test,exec,match
- js正则表达式test()和exec()用法实例
- JavaScript中正则表达式test()、exec()、match() 方法
- 正则方法 exec 和match以及test
- 正则表达式中 test、exec、match 方法区别
- js正则表达exec、match、test和replace、replaceAll
- 正则方法 exec 和match以及test
- 关于js的正则 test,match,exec
- 蛙蛙请教:js里的match方法和exec方法的区别,关于正则表达式的
- js正则表达式中的match、exec、replace【转载】
- js正则表达式test()和exec()用法实例