var s1 = "'abc'as'123'";
line1: document.write(s1.match(/(['"])([^'"]*)\1/g),"<br>");//"abc","123"
line2: document.write(s1.match(/(['"])([^'"]*)\1/),"<br>");//"abc",",abc
line3: document.write(s1.match(/"([^'"]*)"/),"<br>");//"abc",abc我想要的正则意思是''或""包含的字符串为什么
line2得到的不是line3想要的结果thanks by phoenix

解决方案 »

  1.   

    g就是全局匹配么,会把遍历整个字符串,把所有符合的都匹配出来。
    没有g,则是找到一个匹配的就停止了。
    s1.match(/"([^'"]*)"/);//"abc",abc
    match返回一个数组,第一个值是匹配的字符串,第二个值是第一个子匹配,第三个是第二个字匹配...
    这里的话/"([^'"]*)"/匹配的字符串就是"abc",([^'"]*)这个括号里的就是第一个子匹配了,是abc,所以write出来是abc。
    line2得到的不是line3想要的结果,你照着正则检查一下就知道了。
      

  2.   


    那line2中间为什么有个 " 呢?
      

  3.   

    我不是解释很清楚了么
    line2: document.write(s1.match(/(['"])([^'"]*)\1/),"<br>");//"abc",",abc
    "abc"是匹配结果
    "是第一个子匹配结果,对应的正则式中第一个有括号表达式(['"]),这个不就是匹配开头的"。
      

  4.   


    嗯,您说的很清楚,可是我不能马上理解.现在我明白了:由于line2有2个组合(),所以子匹配是每个()再一次匹配结果.谢谢哦.