js 正则方法 exec和match 以及正则的匹配顺序

<script type="text/javascript">

	var someText= "web2.0 .net2.0" ;
	var pattern=/(\w+)(\d)[.](\d)/;
	
	
	var a=pattern.exec(someText);
	var a1=pattern.exec(someText);
	
	
	var b=someText.match(pattern);
	var  b1=someText.match(pattern);
	
	console.log("exec",a)
	console.log(a1)
	console.log("match",b)
	console.log(b1)
</script>

不加全局g 结果是一样的都是只找到第一个满足条件的字符串就返回

(exec (4) ["web2.0", "web", "2", "0", index: 0, input: "web2.0 .net2.0", groups: undefined]
(4) ["web2.0", "web", "2", "0", index: 0, input: "web2.0 .net2.0", groups: undefined]
match (4) ["web2.0", "web", "2", "0", index: 0, input: "web2.0 .net2.0", groups: undefined]
 (4) ["web2.0", "web", "2", "0", index: 0, input: "web2.0 .net2.0", groups: undefined]

结果分析:不加全局结果没区别 都是返回数组 并且数组的第一个是整个正则表达式的匹配结果 后面的依次是子表达式的匹配结果

加了全局g 的结果

<script type="text/javascript">

	var someText= "web2.0 .net2.0" ;
	var pattern=/(\w+)(\d)[.](\d)/g;
	
	
	var a=pattern.exec(someText);
	var a1=pattern.exec(someText);
	
	
	var b=someText.match(pattern);
	var  b1=someText.match(pattern);
	
	console.log("exec",a)
	console.log(a1)
	console.log("match",b)
	console.log(b1)
</script>
exec (4) ["web2.0", "web", "2", "0", index: 0, input: "web2.0 .net2.0", groups: undefined]
(4) ["net2.0", "net", "2", "0", index: 8, input: "web2.0 .net2.0",groups: undefined]
match (2) ["web2.0", "net2.0"]
(2) ["web2.0", "net2.0"]

结果分析:加了全局匹配的g
match中返回的是整个正则表达式的匹配结果 不管执行str.match(reg)多少次 返回的结果都是样的 不返回子正则表达式的结果

exec当加了全局 就等于开启了分步执行的操作 执行一次就返回匹配到详细数据 有子正则表达式返回结果 可以一直执reg.exec(str)最后会返回null,也就是全局匹配完了 返回null 还执行reg.exec(str)又会从头开始匹配结果 重复上一轮的步骤

看下面代码

<script type="text/javascript">
	var str = "abc1.net2"
	var reg = /\w+(\d)/g
	var a =	reg.exec(str);
	var b = reg.exec(str);
	var c = reg.exec(str)
	var d = reg.exec(str)
	var e = reg.exec(str)
	var f = reg.exec(str)
	console.log(a);
	console.log(b)
	console.log(c)
	console.log(d)
	console.log(e)
	console.log(f)
	
</script>

结果

(2) ["abc1", "1", index: 0, input: "abc1.net2", groups: undefined]
(2) ["net2", "2", index: 5, input: "abc1.net2", groups: undefined]
null
(2) ["abc1", "1", index: 0, input: "abc1.net2", groups: undefined]
(2) ["net2", "2", index: 5, input: "abc1.net2", groups: undefined]
null

总结;match是字符串的的方法 str.match(reg) 当 reg = /…/g 有全局g 不会返回子正则表达式匹配的结果,只返回整个表达式一次匹配的结果
没有g 有子正则表达式的匹配结果

exec是正则表达式的方法 reg.exec(str) 当reg有全局 就开启了全局查找步骤 没执行一次reg.exec(str) 就返回整个正则表达式和子正则表达式匹配的结果

另外正则查找字符串的顺序
当没有全局查找 g
是从左往右查找字符串来匹配正则表达式的开头 然后从字符串的右边开始匹配正则表达式的末尾 当末尾匹配到了就截取这段字符 并返回

当有g
是从左往右查找字符串来匹配正则表达式的开头 然后从字符串的右边开始匹配正则表达式的末尾 当末尾匹配到了就截取这段字符 并返回 然后记录这个末尾字符再整个字符串中的位置lastindex

再从整个字符串lastindex这个位置开始 从左往右匹配整个正则表达式的开头 然后从字符串的右边开始匹配正则表达式的末尾 并返回 一次这样匹配

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值