日期:2014-05-16  浏览次数:20485 次

JavaScript正则表达式解惑
刚开始学习JavaScript中正则表达式的内容,对其有所不解,主要是:

replace函数替换的第二个参数中,使用$符号的问题,如下:


不懂其中$` $& $' 的用法,我是在w3cshool网站上学的,它的例子并未详细讲解这三个的用法,
还请各位大侠帮忙讲解一下,万分感谢。


PS: 关于这个用法,不知道用什么来描述,以便可以搜索到相关的资料,
网上好多讲JavaScrit正则表达式的部分都没有这方法的具体讲解。



------解决方案--------------------
$` $& $' 分别代替匹配字符串左侧,匹配字符串,匹配字符串右侧

可以用于更换位置,和一些操作
------解决方案--------------------
HTML code

<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>

------解决方案--------------------
我自己的贴子居然没有权限修改。。 再发一个:
HTML code

<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>
<b