var qq= (function(value) {
                    return value.replace(/<(\/?[a-zA-Z]+\s*)((?:"[^"]*"|'[^']*'|(?!'|"|\/?>).)*)(\/?>)/g, function (l, $1, $2, $3) {
                        return $2.replace(/([^=]+)=(?:(")[^"]*"|(')[^']*'|((?:(?!\s|'|"|\/?>).)*))/g, function (l, $1, $2, $3, $4) {
                            return $4;
                        }) ;
                    });
                })(stringValue);①请问这里的第一个正则表达式的  l, $1, $2, $3分别是什么? ②第二个正则表达式的  l, $1, $2, $3 ,$4又分别是什么? ③还有,两个函数里都有l,这个值就是传入的参数stringValue值吗?⑤另外,循环的依据是什么?就是根据什么循环的?什么时候循环开始,什么时候结束呢? 以上五个问题,每个40分,后继加分。
谢谢大哥大姐帮忙回答一下,万分感谢!!

解决方案 »

  1.   

    $num指第num个匹配值
    匹配值指正则中的pattern也就是括号部分.l在这里好像是多余的...正则后的g就是循环匹配.
      

  2.   

    参见:快速掌握JavaScript正则表达式
      

  3.   

    ①,②,③
    function (l, $1, $2, $3)里的 l, $1, $2, $3是参数名, 用不用$num这种形式都无所谓的, 反正
    第一个参数表示表示前面的正则表达式所匹配到的全部内容, 后面的参数依次表示正则里面找到的子匹配①,②都是这个意思. 只不过第二个里面进行查找的文本, 是第一个里面查找到的第二个子匹配⑤循环依据就是源字符串里面还有没有与模式相匹配的字符串, 如果有就继续, 直到找不到匹配为止
      

  4.   

    这里只是参数名而已
    document.close();
    document.open();var str = "123abc";
    str = str.replace(/(.)(.)(.)/g, function(all, one, two, three) {
    document.write("all:" + all + "<br/>");
    document.write("one:" + one + "<br/>");
    document.write("two:" + two + "<br/>");
    document.write("three:" + three + "<br/>");
    });对于String.replace(rgExp, replaceFunc)方法
    replaceFunc中第一参数就是正则匹配的全部内容,第二参数就是第一组匹配,第三参数就是第二组匹配
      

  5.   


    var qq= (function(value) {
                        return value.replace(/ <(\/?[a-zA-Z]+\s*)((?:"[^"]*"|'[^']*'|(?!'|"|\/?>).)*)(\/?>)/g, function (l, $1, $2, $3) {
                            return $2.replace(/([^=]+)=(?:(")[^"]*"|(')[^']*'|((?:(?!\s|'|"|\/?>).)*))/g, function (l, $1, $2, $3, $4) {
                                return $4;
                            }) ;
                        });
                    })(stringValue);①请问这里的第一个正则表达式的  l, $1, $2, $3分别是什么?②第二个正则表达式的  l, $1, $2, $3 ,$4又分别是什么? 
    为何没有高手回答呢~~~~~~~
    谢谢啦。
      

  6.   

    学习5 楼 zswang的。
    其中 function(all, one, two, three)的参数名只要是合法的(不是单纯数字之类),是什么无所谓的。
    在 function (l, $1, $2, $3) 中的$1等只是参数名 不是匹配捕获的值.
    function (l, $1, $2, $3) 与 function (l, $3, $2, d)是等价的.
    匹配捕获的值的引用应该诸如RegExp.$1或者str.replace(regex,'$1')这样使用的.
      

  7.   

    详细可参考《Javascript权威指南》(第五版)。在第699-700页,有关于replace的讲解。