var stringValue = "字符串" ;
var valueA = (function(value) {
    return value.replace(/正则表达式A/g, function (l, $1, $2, $3) {
        return  $2.replace(/正则表达式B/g, function (l, $1, $2, $3, $4) {
            return $4 + $3 + $2 + $1;
        });
    });
})(stringValue);
大家能帮我讲解下,这个js函数的执行顺序吗?
有三个return语句,程序会先执行哪一个?
其中l, $1, $2, $3,这是什么?他们的值从哪里来?
传入的stringValue和l, $1, $2, $3,有关系吗?感觉这个函数和一般的不同,看不明白~~
由于紧急需用,所以也没时间看太基础的知识,
麻烦各位啦。
先给100分,不够会继续增加,
谢谢各位了~~

解决方案 »

  1.   

    这是个循环的过程,先要匹配正则表达式A才能达到$2,然后匹配正则表达式B再得到$1, $2, $3, $4 。
    $1, $2, $3是正则表达式中()模式匹配的值,比如有 (xx)(xx) $1就是前面的(xx)匹配的内容,$2就是后面的(xx)匹配的内容
    如果(xx(xx)xx) $1是(xxxxxx)匹配的内容,$2就是(xx)匹配的内容.要看正则表达式如何写。
    stringValue是要被查找匹配的字符串,$1, $2, $3就是其中匹配模式的子串.
      

  2.   

    $data is 192.168.0.1 
    $data =~ /([0-9]*.)([0-9]*.)([0-9]*.)([0-9])/; 
    $1 is 192. 
    $2 is 168. 
    $3 is 0. 
    $4 is 1 
    这里 
    /([0-9]*.)([0-9]*.)([0-9]*.)([0-9])/  匹配了192.168.0.1 
    同时在这个较长的正则表达式子是由几个短的正则表达式组成的,这些短的在()中的正则表达式称为模式,大家对$1,$2,$3,$4的值的输出都非常理解 下面再举一个例子 
    代码: 
    $data =~ /([0-9]*.)([0-9]*.)*([0-9])/; 
    $1 is 192. 
    $2 is 0. 
    $3 is 1 
     
      

  3.   

    A,如果是这样:replace(/<(\/?[a-zA-Z]+\s*)((?:"[^"]*"|'[^']*'|(?!'|"|\/?>).)*)(\/?>)/g, function (l, $1, $2, $3) 
    那么其中的l, $1, $2, $3分别是什么?B,如果是这样:replace(/([^=]+)=(?:(")[^"]*"|(')[^']*'|((?:(?!\s|'|"|\/?>).)*))/g, function (l, $1, $2, $3, $4) {
    那么其中的l, $1, $2, $3, $4分别是什么?还有,两个函数里都有l,这个值就是传入的参数stringValue值吗?
    另外,循环的依据是什么?就是根据什么循环的?什么时候循环开始,什么时候结束呢?谢谢~
      

  4.   

    这是个循环的过程,先要匹配正则表达式A才能达到$2,然后匹配正则表达式B再得到$1, $2, $3, $4 。
    $1, $2, $3是正则表达式中()模式匹配的值,比如有 (xx)(xx) $1就是前面的(xx)匹配的内容,$2就是后面的(xx)匹配的内容
    如果(xx(xx)xx) $1是(xxxxxx)匹配的内容,$2就是(xx)匹配的内容.要看正则表达式如何写。
    stringValue是要被查找匹配的字符串,$1, $2, $3就是其中匹配模式的子串.