【前端学习】字符串replace使用

String对象的replace方法包含两个参数,第一个参数表示执行匹配的正则表达式,也可以传递字符串,第二个参数表示代替匹配的子字符串。

   var b = s.replace("str1","str2");

与search和match方法不同,replace方法不会吧字符串转换为正则表达式对象,而是以字符串直接量的文本模式尽心匹配。第二个参数可以是替换文本,或者是生成替换文本的函数,将返回值作为替换文本。

replace方法同时执行查找和替换两个操作。该方法将在字符串中查找与正则表达式相匹配的子字符串,然后调用第二个参数替换这些子字符串。(js中正则表达式的使用方式有两种,一种是正则表达式对象的方法,一种是字符串对象的方法,前者有exec(str)、test(str)两个方法,后者有match(regexp)、replace(regexp)、search(regexp)、split(search)四个方法。)如果正则表达式具有全局性质,那么将替换所有匹配的子字符串,否则只替换第一个匹配子字符串。

   var b = '1231231234' ;

     console.log(b.replace('123','321')) // 3211231234

     console.log(b.replace(/123/,'321')) //3211231234  非全局正则

     console.log(b.replace(/123/g,'321')) //3213213214 全局正则

在replace方法中约定了一个特殊的字符“$”,如果加了一个序号,就表示引用正则表达式中匹配的子表达式存储的字符串。例如:

   var s  = "javascript";

   var b = s.replace(/(java)(script)/,''$2-$1");

     console.log(b) // script-java

  • $1,$2...$99;与正则表达式中的第1~99个子表达式相匹配的文本。
  • $& 与正则表达式相匹配的子字符串。
  • $`位于匹配子字符串左侧的文本
  • $'位于匹配子字符串右侧的文本
  • $$表示$

当第二个参数使用函数时

       var s = 'script language = "javascript" type = " text / javascript" ';

   var f = function($1) {

         return $1.substring(0,1).toUpperCase() + $1.substring(1)

      };

     console.log(s.replace(/(\b\w+\b)/g,f)); // Script Language = "Javascript" Type = " Text / Javascript" 

    var f2 = function($1,$2,$3) {

         return $2+$3

      };

      console.log(s.replace(/(\b\w+\b)/g,f2)); //script0 language7 = "javascript19" type31 = " text40 / javascript47" 

  • arguments[0] 每次匹配的文本
  • arguments[1]~argument[n-3] 第一个至最后一个匹配子表达式匹配的文本
  • arguments[n-2] 匹配文本的下标
  • arguments[n-1] 执行匹配的字符串
posted @ 2015-06-07 12:17  lomo1219  阅读(3713)  评论(0编辑  收藏  举报