刚开始学习JavaScript中正则表达式的内容,对其有所不解,主要是:replace函数替换的第二个参数中,使用$符号的问题,如下:
不懂其中$` $& $' 的用法,我是在w3cshool网站上学的,它的例子并未详细讲解这三个的用法,
还请各位大侠帮忙讲解一下,万分感谢。
PS: 关于这个用法,不知道用什么来描述,以便可以搜索到相关的资料,
网上好多讲JavaScrit正则表达式的部分都没有这方法的具体讲解。

解决方案 »

  1.   

    $` $& $' 分别代替匹配字符串左侧,匹配字符串,匹配字符串右侧可以用于更换位置,和一些操作
      

  2.   


    <html>
    <head>
      <script language="javascript"> 
        function Window_Load(){
          var str = "a123b456c78";
          var reg = /(\d+)/g;  //加上个分组括号
          
          reg.test(str); //进行正则匹配  reg.test() 或 reg.exec() 或 reg.compile()
          /* 
             在javascript里,正则匹配完成以后,当前匹配所有相关的内容都会放到RegExp
             对象里,所以,你要是想查看($` $& $‘)的内容,像下面这样就可以了: 
          */
          log("正则表达式:", reg.source);
          log("字符串:", RegExp["$_"]);   //RegExp.input
          log("匹配字串:", RegExp["$&"]);
          log("匹配字串左侧的字串(RegExp[\"$`\"]):" ,RegExp["$`"]); //RegExp.leftContext
          log("匹配字串右侧的字串(RegExp[\"$'\"]):" ,RegExp["$'"]); //RegExp.rightContext
          log("捕获的第一个分组的内容(RegExp[\"$1\"]):",RegExp["$1"]); 
          log("最后一个括号括起来的字串(RegExp[\"$+\"]):",RegExp["$+"]);//RegExp.lastParen    
        }
        
        function log(){
          for(var i = 0; i < arguments.length;i++){ 
             document.write(arguments[i]+ " ");
          }
           document.write("<BR />");
        }
      </script>
    </head>
    <body onload="Window_Load();"> 
    </body>
    </html>
      

  3.   

    我自己的贴子居然没有权限修改。。 再发一个:<html>
    <head>
      <script language="javascript">
        function Window_Load(){
          /*
            漏了一个,你说的replace函数替换的第二个参数中,使用$符号的问题
          */
          var str = "a1b2c3";
          
          /*
            比如上面的str字串,假设想把字串里的所有数字提取出来(或者说把里面的字母全干掉)
          */
          //1. 可以把字母全部replace成空
          var reg = /[a-z]/g; //注意一定要加上 g ,表示全部替换,不然的话之能替换第一个 
          log(reg.toString(), "  str.replace(reg,\"\") : " ,str.replace(reg,"")); //返回:123
          
          //2. 字串格式固定的情况下,就可以用$1,$1..$2的方式直接替换
          var reg = /^[a-z](\d)[a-z](\d)[a-z](\d)$/;
          log(reg.toString(), "  str.replace(reg,\"$1$2$3\") : " ,str.replace(reg,"$1$2$3")); //返回:123 
          log(reg.toString(), "  str.replace(reg,\"$1$1$3\") : " ,str.replace(reg,"$1$1$3")); //返回:113 
          log(reg.toString(), "  str.replace(reg,\"$2$1$3\") : " ,str.replace(reg,"$2$1$3")); //返回:213 
          log(reg.toString(), "  str.replace(reg,\"$2测$2试$3\") : " ,str.replace(reg,"$2测$2试$3")); //返回:2测2试3  
          
          //其实在执行str.replace以后,正则表达式已经匹配过一次了,所以下面代码可用
          log(reg.toString(), "  RegExp[\"$1\"] + RegExp.$2 + RegExp.$3 : ", RegExp["$1"] + RegExp.$2 + RegExp.$3); //返回123 
          
          //3。RegExp.exec() 或 String.mactch()方法来实现
          var reg = /\d/g; //你可以自己测试一下 有g 跟 没g的区别 
          var rdata = ""; 
          while(reg.exec(str)){  //没有g的时候 这个会变成死循环 (别说我没提醒你啊..!)
           rdata += RegExp["$&"];
          }
          log(reg.toString(),"  reg.exec(str) : ",rdata); //返回123  
          //或者 
          var result = str.match(reg); //返回结果数组
          log(reg.toString(), "  str.match(reg).join(\"\") : ", result.join("") );//返回123 
        }
        
      function log(){
        for(var i = 0; i < arguments.length;i++){ 
           document.write(arguments[i]+ " ");
        }
         document.write("<BR />");
      }
      </script>
    </head>
    <body onload="Window_Load();"> 
    </body>
    </html>
      

  4.   

    var str = "Hello Hi Welcome",
    reg = /Hi/;
    alert(str.replace(reg, "Hey")); // "Hello Hey Welcom"
    alert(str.replace(reg, "$`")); // "Hello Hello  Welcome"
    alert(str.replace(reg, "$&!")); // "Hello Hi! Welcome"
    alert(str.replace(reg, "$'")); // "Hello  Welcome Welcome"