为什么macth全局匹配时候和其他不同?
var str = "woshi(rui)(shq)",
reg = /\((.*)\)$/g;
re = /\((.*)\)$/;
alert('exec: '+re.exec(str)+
'\nmatch: '+str.match(re)+
'\nexec(g):'+reg.exec(str)+
'\nmatch(g):'+str.match(reg));
var str = "woshi(rui)(shq)",
reg = /\((.*)\)$/g;
re = /\((.*)\)$/;
alert('exec: '+re.exec(str)+
'\nmatch: '+str.match(re)+
'\nexec(g):'+reg.exec(str)+
'\nmatch(g):'+str.match(reg));
可以通过re.lastIndex reg.lastIndex来验证 不带/g的永远是0 只有全局匹配的reg才会在匹配的时候记录
例子不带循环输出 所以使用exec是无意义的 也显示不出来他的强大 exec是正则里最NB的方法
match可以看做exec的缩水简洁版 这个方法不带全局和带全局的区别特别古怪
我都懒得用 不带全局的会把匹配整体 和整体的分组记录到返回的数组里 但设置全局后 却把整体 和每个分组的整体记录在数组里
你要清楚结果的不同先要理解你正则所表达的意思
/\((.*)\)$/ 表示 从末尾开始找 要求必须是)结尾 .*你没加? 所以正则就会贪婪匹配 ()()他就会把 )(当成.来都匹配到()里了 可以修改下 测试测试/\((.*?)\)/
全局匹配返回 所有满足匹配的集合(不返回子匹配)