var aaa = "AJSTAT_ok_pages=23;";
 alert(aaa.match(new RegExp("(^| )AJSTAT_ok_pages=([^;]*)(;|$)")));我使用这个弹出的 值为AJSTAT_ok_pages=23;,,23;,
我查了下 好像是匹配出了 
[0]=AJSTAT_ok_pages=23;
[1]=空 就是2个逗号中间
[2]=23;
[3]=空  最后个逗号后面的值请问这是为什么 我对这个正则的理解是(^| )AJSTAT_ok_pages=([^;]*)(;|$)
(^| ) 空格开始 或者以^开始
AJSTAT_ok_pages= 一定要有这个字符串
([^;]*) 不是;号的所有字符
(;|$)分号结尾 或者直接结尾 
 按我的理解 应该只能 匹配出
AJSTAT_ok_pages=23;这一个值吧  怎么会匹配出4个值 
就算有4个值  那也没个值都包含  AJSTAT_ok_pages= 这个字符串吧 请教高手解析下
对正则了解不深 很恼火 

解决方案 »

  1.   

    var aaa = "AJSTAT_ok_pages=45;,,23;,";
    alert(aaa.match(new RegExp("(^| )AJSTAT_ok_pages=([^;]*)(;|$)")));还包括里面的子匹配
    0]=AJSTAT_ok_pages=45; 整个匹配
    [1]=空 第一个子匹配,就是匹配^
    [2]=45 第二个子匹配
    [3]=; 第三个子匹配,就是匹配45后面的;
      

  2.   


    正解,如果不想存储括号的匹配, 可以用 ?:
    如:
    alert(aaa.match(new RegExp("?:(^| )AJSTAT_ok_pages=?:([^;]*)?:(;|$)")));
      

  3.   

    [0] 内的值始终都是整个匹配的值
    你可以用这个在线调试一下正则:
    http://www.renrousousuo.com/tools/regex_debug.html我觉得其他组的捕获木有必要 反而忽略大小写是有必要的
    你可以试试这个:var reg=/^\s*AJSTAT_ok_pages=([^;]*);?$/i;