字符串中的replace方法
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方法的更多相关文章
- Javascript中使用replace()方法+正则表达式替换掉所有字符
Js中的replace方法,只能替换掉第一次匹配到的字符, 而我们经常需要替换一个字符串中所有的匹配字符,这时候可以用正则表达式: str.replace(/a/g,"b"); ...
- python中的replace()方法的使用
python中的replace()方法的使用 需求是这样的:需要将字符串的某些字符替换成其他字符 str.replace(old,new,max) 第一个参数是要进行更换的旧字符,第二个参数是新的子串 ...
- Python关于去除字符串中空格的方法
Python关于去除字符串中空格的方法 在编写程序时我们经常会遇到需要将字符串中的空格去掉的情况,通常我们可以使用下面几种解决方法: 1.strip()方法:该方法只能把字符串头和尾的空格去掉,但是不 ...
- String:(字符串)中常用的方法
package stringyiwen; //字符串中常用的方法public class StringTest03 { public static void main(String[] args) { ...
- js中字符串 stringObject 的 replace() 方法
一.定义 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的字符串. 二.语法 stringObject.replace(regexp/substr,repl ...
- JavaScript 中的 replace 方法
定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. stringObject.replace(regexp/substr,replaceme ...
- JS中的replace方法以及与正则表达式的结合应用
replace方法的语法是:stringobj.replace(rgexp, replacetext) 其中stringobj是字符串(string),reexp可以是正则表达式对象(regexp)也 ...
- JS中的replace方法
JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replace(/\-/ ...
- 深入理解 JavaScript 中的 replace 方法(转)
replace方法是属于String对象的,可用于替换字符串. 简单介绍: StringObject.replace(searchValue,replaceValue) StringObject:字符 ...
随机推荐
- CodeForces-721D-Maxim and Array(优先队列,贪心,分类讨论)
链接: https://vjudge.net/problem/CodeForces-721D 题意: Recently Maxim has found an array of n integers, ...
- mysql 8.0.16 单主 mgr搭建
mysql 8.0.16 单主 mgr搭建 环境介绍: 192.168.142.142 db142192.168.142.143 db143192.168.142.145 db145 1.安装依赖包 ...
- UML中共有5种静态图
用例图,类图,对象图,组件图和配置图.
- Java——静态类型 实际类型
public class test { static class father { void run() { System.out.println("father run"); } ...
- java-dockerfile
java环境dockefile FROM centos:7 MAINTAINER yon@taexa.com ENV JAVA_HOME /usr/local/jdk ENV JRE_HOME ${J ...
- python导入包失败ModuleNotFoundError: No module named 'matplotlib.pyplot'; 'matplotlib' is not a package
最近在看 python,在使用matplotlib进行绘图时,提示:ModuleNotFoundError: No module named 'matplotlib.pyplot'; 'matplot ...
- 基于STM32的CRC校验说明
///***************************************************************************** //下面是test.c里面的函数 // ...
- sh_04_累加求和
sh_04_累加求和 # 计算 0 ~ 100 之间所有数字的累计求和结果 # 0. 定义最终结果的变量 result = 0 # 1. 定义一个整数的变量记录循环的次数 i = 0 # 2. 开始循 ...
- Spring Boot教程(十五)使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程
在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...
- RestTemplate 调用本地服务 connection refused
当需要使用服务间的互相调用的时候,通常来说最优雅的方式莫过于Feign调用了.但是有时候特殊原因还是需要使用httpClient之类的工具. 本次我在使用RestTemplate调用本地服务的时候,会 ...