String.prototype.replace()

该方法作为字符串中非常常用的方法, 今天我们具体介绍一下它的用法

语法格式

someString.replace(regxp | substr, newStr | function)

第一个入参可以是正则或者是字符串, 如是字符串将不能设置忽略大小写, 在匹配到结果后返回, 而不继续匹配下去, 若是正则表达式则会按正则的意图进行匹配;

第二个入参是新字符串或者是回调函数, 若是新字符串则会替换匹配到的字符串, 如果是函数则在每次匹配到结果时执行该函数并把函数的返回值替换匹配到的字符串;

该方法不会破坏原来的字符串, 而且带有返回值, 返回的是一个部分或者全部由替代模式所取代的新的字符串, 以为有返回值, 所以支持链式调用;

第二个参数是字符串时

该字符串中可以插入以下特殊变量:

变量名 解释
$$ 代表插入一个 $
$& 插入匹配的子串, 用来引用匹配到子串
$` 插入当前匹配到的子串左边的内容
$' 插入当前匹配到的子串的右边的内容
$n 如果第一个参数是正则, 并且 n 是个小于100的正整数, 那么插入第 n 个括号匹配的字符串

一些 Demo 如下:

let str = 'hello world';
str.replace('o', '$$'); // "hell$ world"
str.replace('o', '-$&-'); // "hell-o- world"
str.replace('o', '$`'); // "hellhell world"
str.replace('o', '$\''); // "hell world world"
str.replace(/(o)|(d)/g, '-$1-$2'); // "hell-o- w-o-rl--d", 这个结果大家好好用心理解

第二个参数是函数时

在这种情况下,当匹配执行后, 该函数就会执行。 函数的返回值作为替换字符串。 (注意: 上面提到的特殊替换参数在这里不能被使用。) 另外要注意的是, 如果第一个参数是正则表达式, 并且其为全局匹配模式, 那么这个方法将被多次调用, 每次匹配都会被调用。该函数的入参解释:

函数入参位置 对应解释
match 匹配到的字符串
p1, p2, p3, ... 同上 $1, $2, $3
offset 匹配到的字符串在原字符串中的偏移量
string 原字符串

该函数的精确参数取决于第一个参数是不是正则表达式, 以及该正则里指定了多少个括号子串

// 如果我们要把字符串中的单词首字母大写, 可以进行如下操作
let str = 'hello world',
reg = /(\w)(\w*)/g; str.replace(reg, function(match, p1, p2, offset, str) {
console.log(match, p1, offset, str);
return p1.toUpperCase() + p2;
});

对于上面的函数中的入参大家可以打印一下看看, 并加以理解;

String.prototype.replace() 这个方法在字符串操作中使用非常频繁, 同时也由于其相对复杂的入参组合导致该方法非常灵活, 我们看一看在我们项目中使用它的场景; 掩码手机号 相信大家都做过, 我们看看使用 replace 如何实现:


// 假设我们有一个手机号
let tel = '13194099515',
res = '',
tmp = '****'; // 方法1:
res = tel.replace(/\d{4}(?=\d{4}$)/g, tmp); // 第一个参数是正则 // 方法2:
res = tel.replace(/(\d{3})(\d{4})/g, '$1' + tmp); // 第一个参数是正则 // 方法3:
res = tel.replace(tel.slice(3, -4), tmp); // 第一个参数是字符串 // 方法4:
res = tel.replace(/(\d{3})(\d{4})(\d{4})/g, function(match, p1, p2, p3) {
return p1 + tmp + p3;
});

相信应该还有别的可以使用 replace() 实现的途径, 大家可以好好考虑一下;

小结

String.protype.replace() 方法使用比较灵活, 大家可以在项目中通过多使用来加深对它的理解和记忆, 一般对于简单匹配, 第二个参数可以使用简单字符串来操作, 如果要对替换控制的比较精细的话, 需要有一个比较清晰的正则做为第一个入参, 此时第二个入参可以使用回调函数进行精确控制。

字符串中的replace方法的更多相关文章

  1. Javascript中使用replace()方法+正则表达式替换掉所有字符

    Js中的replace方法,只能替换掉第一次匹配到的字符,   而我们经常需要替换一个字符串中所有的匹配字符,这时候可以用正则表达式: str.replace(/a/g,"b"); ...

  2. python中的replace()方法的使用

    python中的replace()方法的使用 需求是这样的:需要将字符串的某些字符替换成其他字符 str.replace(old,new,max) 第一个参数是要进行更换的旧字符,第二个参数是新的子串 ...

  3. Python关于去除字符串中空格的方法

    Python关于去除字符串中空格的方法 在编写程序时我们经常会遇到需要将字符串中的空格去掉的情况,通常我们可以使用下面几种解决方法: 1.strip()方法:该方法只能把字符串头和尾的空格去掉,但是不 ...

  4. String:(字符串)中常用的方法

    package stringyiwen; //字符串中常用的方法public class StringTest03 { public static void main(String[] args) { ...

  5. js中字符串 stringObject 的 replace() 方法

    一.定义 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的字符串. 二.语法 stringObject.replace(regexp/substr,repl ...

  6. JavaScript 中的 replace 方法

    定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. stringObject.replace(regexp/substr,replaceme ...

  7. JS中的replace方法以及与正则表达式的结合应用

    replace方法的语法是:stringobj.replace(rgexp, replacetext) 其中stringobj是字符串(string),reexp可以是正则表达式对象(regexp)也 ...

  8. JS中的replace方法

    JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replace(/\-/ ...

  9. 深入理解 JavaScript 中的 replace 方法(转)

    replace方法是属于String对象的,可用于替换字符串. 简单介绍: StringObject.replace(searchValue,replaceValue) StringObject:字符 ...

随机推荐

  1. 基础习题1——print

    引号内,空格就表示空格,引号外,逗号表示空格 print('100+200 =',100 + 200)===100+200 = 300 print('hello','world')===hello w ...

  2. ArrayList的contains()和HashSet的contains()效率比较

    ArrayList的contains(Object o)方法内部只有一行代码:判断indexOf(0)是否大于等于0.而indexOf(o)内部会从头遍历数组,直到某位置的元素等于o,极端情况下,要把 ...

  3. 通过 PHP 生成 XML

    如需使用 PHP 在服务器上生成 XML 响应,请使用下面的代码: <?php header("Content-type:text/xml"); echo "< ...

  4. 为什么C++中只有指针和引用才能实现多态?

    代码: class A { public: virtual void Debug(){} }; class B:public A { public: virtual void Debug(){} }; ...

  5. sh_12_转义字符

    sh_12_转义字符 # \t 在控制台输出一个 制表符,协助在输出文本时 垂直方向 保持对齐 print("1\t2\t3") print("10\t20\t30&qu ...

  6. Redis、Nginx加入启动命令

    1.redis加入系统启动命令 vim /etc/init.d/redis #!/bin/sh #chkconfig: 2345 80 90 # Simple Redis init.d script ...

  7. 箭头函数详解()=>{}

    摘要:箭头函数有几个使用注意点. (1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象,箭头函数继承而来的this指向永远不变. (2)不可以当作构造函数,也就是说,不可以使用n ...

  8. 一、Spring MVC起步——IntelliJ IDEA 搭建Spring MVC环境(手把手搭建)

    本机环境: JDK 1.7 IntelliJ IDEA 2017.2 1.新建项目 Create New Project ​ 选择Spring MVC ​ 填写项目名和项目存放位置 ​ 然后点击Fin ...

  9. vscode中让html中php代码高亮

    找到设置中的文件设置中的files.associations,增加以下内容(注意一下内容要放在右侧的用户设置中,而不是放在中间的默认设置中): { // Configure file associat ...

  10. Java文件中代码

    public class MyTextView extends TextView { //在用代码创建的时候调用 public MyTextView(Context context) { this(c ...