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

原文地址:https://www.cnblogs.com/idiv/p/8442046.html

时间: 2024-07-31 21:03:59

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

java中String类中的replace方法

package stringTest; public class StringDemo2 { public static void main(String[] args) { String s = "acvbb"; String s1 = new String("acvbb"); String s2 = s.replace("a", "X"); String s3 = s1.replace("a", &qu

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

Python关于去除字符串中空格的方法 在编写程序时我们经常会遇到需要将字符串中的空格去掉的情况,通常我们可以使用下面几种解决方法: 1.strip()方法:该方法只能把字符串头和尾的空格去掉,但是不能将字符串中间的空格去掉. s=' This is a demo ' print(s.strip()) lstrip():该方法只能把字符串最左边的空格去掉. s=' ! This is a demo ' l='!' print(s.lstrip()+l) rstrip():该方法只能把字符串最右边

黑马程序员——java——模拟一个字符串中的trim方法去掉一个字符串两端的空格

模拟一个字符串中的trim方法去掉一个字符串两端的空格 public class StingTrimDemo { //模拟一个trim方法, 去掉一个字符串两边的空格], public static void main(String[] args) { // TODO Auto-generated method stub String s = " my java "; System.out.println("未去空格前的字符串+++:[ "+s+" ]&q

JavaScript 中的 replace 方法

定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. stringObject.replace(regexp/substr,replacement) 参数 描述 regexp/substr 必需.规定子字符串或要替换的模式的 RegExp 对象. 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象. replacement 必需.一个字符串值.规定了替换文本或生成替换文本的函数. 返回值

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

replace方法是属于String对象的,可用于替换字符串. 简单介绍: StringObject.replace(searchValue,replaceValue) StringObject:字符串 searchValue:字符串或正则表达式 replaceValue:字符串或者函数 字符串替换字符串 JavaScript 1 'I am loser!'.replace('loser','hero')//I am hero! 直接使用字符串能让自己从loser变成hero,但是如果有2个lo

C#中的正则表达式中的replace方法【转载】

C#中的正则表达式 其中如果包含的字符串中包含双引号,那么就两个双引号表示,而不是反斜杠加上双引号(\”),也不是斜杠加上双引号(/”)   正则表达式获取CSS里面的图片的例子,里面有URL里面的图片地址有双引号,要注意用两个双引号""表示 static void Main(string[] args) { Regex reg = new Regex(@"url\((['""]?)(.+[^'""])\1\)"); //注意

JS中的replace方法

JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replace(/\-/g,"!")则可以全部替换掉匹配的字符(g为全局标志). 所以可以用以下几种方式.:string.replace(/reallyDo/g, replaceWith);string.replace(new RegExp(reallyDo, 'g'), replaceWith); string

去除字符串中空格的方法(2016.1.12P141-2)

1 // forif来处理空格 2 // 方法一 3 String str = " ww sse rr"; 4 5 String str1;// 定义一个中间变量 6 7 String str2 = "";// 定义一个中间变量 8 9 for (int i = 0; i < str.length(); i++) { 10 11 str1 = str.substring(i, i + 1); 12 13 if (!(str1.indexOf(" &q

Python中去除字符串中空格的方法

Python中去除字符串中指定字符或者空格的方法有几种: str.strip() //该方法用于去除字符串开头和结尾的指定字符或字符串(默认为空格或换行符) str.lstrip() //该方法用于截掉字符串左边的空格或指定字符 str.rstrip() //该方法用于截掉字符串右边的空格或指定字符 所以若是要去除字符串中所有的空格可以使用如下方式: str.strip().lstrip.rstrip() 原文地址:https://www.cnblogs.com/EdenChanIy/p/993