关于正则表达式的问题 大家一起来解释下

    1、var reg=/([Jj]ava)(Script)?/;
    var b="JavaScript is not Java";
    alert(b.match(reg));         
            结果为:JavaScript Script Java
            2、var reg=/([Jj]ava)(Script)?/g;
    var b="JavaScript is not Java";
    alert(b.match(reg));         
            结果为:JavaScript  Java 
            为什么加了全局标志 Script却没了 求解释???? :cry:  :cry:  :cry:  :( 

["JavaScript", "Java", "Script"]
这个数组有三个元素。0元素正好是整个匹配,1元素和2元素是包含了匹配中出现的任一个子匹配即"Java", "Script" ([Jj]ava)和(Script))

如果设置了全局标志g

[quote]/([Jj]ava)(Script)?/g;[/quote]
正则出来结果是j/JavaScript 或者 j/Java 。j/Java 这个是必须包含的

所以结果就是JavaScript Java

第一个结果是:["JavaScript", "Java", "Script"] 吧?它们分别是匹配的整串、匹配的子串们(用括号包起来的部分)
第二个加了g,可能有多个结果,只返回了匹配到的所有整串

如果没有设置全局标志 (g),数组的0元素包含整个匹配,而第 1 到 n 元素包含了匹配中曾出现过的任一个子匹配。这相当于没有设置全局标志的 exec 方法。如果设置了全局标志,元素0到n中包含所有匹配。