为什么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));

解决方案 »

  1.   

    搜索到这个http://zzx19452008-163-com.iteye.com/blog/1160620
      

  2.   

    exec 不带全局 表示匹配一次 全局表示 是一次匹配后 记录此次的结尾位置 然后继续匹配 直至 字符结尾 
    可以通过re.lastIndex reg.lastIndex来验证 不带/g的永远是0 只有全局匹配的reg才会在匹配的时候记录
    例子不带循环输出 所以使用exec是无意义的 也显示不出来他的强大 exec是正则里最NB的方法
    match可以看做exec的缩水简洁版 这个方法不带全局和带全局的区别特别古怪 
    我都懒得用 不带全局的会把匹配整体 和整体的分组记录到返回的数组里 但设置全局后 却把整体 和每个分组的整体记录在数组里 
    你要清楚结果的不同先要理解你正则所表达的意思
    /\((.*)\)$/ 表示 从末尾开始找 要求必须是)结尾 .*你没加? 所以正则就会贪婪匹配 ()()他就会把 )(当成.来都匹配到()里了 可以修改下 测试测试/\((.*?)\)/
      

  3.   

    明白了,match非全局匹配:返回第一次匹配以及子匹配
    全局匹配返回 所有满足匹配的集合(不返回子匹配)