大哥大姐们帮帮忙最近刚刚看js的东西但是比较难理解如var tagTokenRe=/^(#)?([\w-\*]+)/;
var str="head/script";
var b=str.match(tagTokenRe);
alert(b[0]+"-"+b[1]+"-"+b[2])结果返回 head--head
为什么会这样? match返回的不是匹配的数组吗?小弟不明白

解决方案 »

  1.   

    数组时对的 相当于java中的group  你这个pattern 看样子这匹配了 head 这个单词 这样 [0]就是全部 就是head  [1]对应的(#)?这个结果 没有井号 所以匹配的【1】为空,【2】就是head
      

  2.   


    对于字符串的match,如果正则表达式是全局的,即: var tagTokenRe=/^(#)?([\w-\*]+)/g;
    返回的 数组 是所有的匹配: 在这里只有一个 'head' (因为是从行首开始的)
    如果正则表达式是非全局的,返回的 数组 包含的是第一个匹配,接下来是第一个分组的捕获,第二个分组捕获。
    这里第一个分组没匹配到#,所以为空,第二个分组匹配到head
      

  3.   

    加了(),这样的分组里,好像g就不起作用了,只返回第一个,
    你这边是返回了第一个,整体是了b[0]head,第一个组没有匹配是b[1]空,第二个组有匹配是b[2]=head