正则表达式替换(String对象的replace)方法笔记


String对象的replace方法


参数 relpace( [ reg | string ], [ string | function ] )

  • 第一个参数表示执行匹配的正则表达式,也可以传递字符串
    • 与search和match不同,replace方法不会把字符串转化成正则对象,而是以字符串直接量的文本模式进行匹配。
  • 第二个参数可以是替换的文本或是生成替换文本的函数,把函数的 返回值 作为替换文本

特殊符号 $

  • $1 $2 ...$99:表示与正则表达式中的第1-99个子表达式相匹配的文本
var a = 'javascript';
var b = a.replace(/(java)(script)/,"$2$1");
console.log(b); // "srciptjava"
  • $& :与正则表达式相匹配的子字符串
var a = 'javascript';
var b = a.replace(/.*/, "$&$&");
console.log(b); // "javasrciptjavasrcipt"
  • $`(反单引号):位于匹配子字符串左侧的文本
var a = 'javascript';
var b = a.replace(/script/, "$`");
console.log(b); // "javajava"
  • $'(单引号):位于匹配子字符串右侧的文本
var a = 'javascript';
var b = a.replace(/java/, "$'");
console.log(b); // "scriptscript"
  • $$: 表示$符号

第二个参数为函数

function($,$1,$2, …… ,n,string)

  • 第1个参数表示每次匹配的文本
  • 第2个参数表示本次匹配的第 1 个子表达式所匹配的文本
  • 第3个参数表示本次匹配的第 2 个子表达式所匹配的文本
  • ………………………………………………
  • 倒数第二个参数表示匹配文本的下标位置
  • 最后一个参数表示字符串自身

例1

var a = 'script language = "javascript"';
var f = function($1){  //$1也可以用x等其他形参代替
  return $1.slice(0,1).toUpperCase() + $1.slice(1);
};
var b = a.replace(/(\b\w+\b)/g, f);
console.log(b);

例2

var s = "张三56分,李四74分,王五92分,赵柳84分";
var a =s.match(/\d+/g),sum =0;
for( var i= 0 ; i<a.length ; i++){
    sum += parseFloat(a[i]);
};
var avg = sum / a.length;
function f(){
    var n = parseFloat(arguments[1]);
return n + "分" + " ( " + (( n > avg ) ? ( "超出平均分" + ( n - avg ) ) :( "低于平均分" + ( avg - n ) )) + "分 ) ";
}
var s1 = s.replace( /(\d+)分/g, f );
console.log(s1);

例3

var s = 'script language = "javaScript" type= " text / javaScript"';
var f = function($_all,$1,$2,$3,n,s){
    return $1.toUpperCase()+$2+n;
}
var a = s.replace( /\b(\w)(\w)(\w*)\b/g, f ); 
console.log(a); //Script Language = "JavaScript" Type =" Text /JavaScript"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容