正则-replace

replace: 把原有的字符替换成新的字符。
在不使用正则的情况下,每当执行一次只能替换一个字符。

    var str = 'derrick20derrick21';
    str = str.replace('derrick', 'Qian');
    // 没有实现需求
    console.log(str);

    var str = 'derrick20derrick21';
    str = str.replace(/derrick/g, 'Qian');
    console.log(str)

replace第一项的值是一个正则,它的实现原理:
首先和exec捕获一样,把所有和正则匹配的都捕获到,然后把捕获的内容替换成我们需要替换的新内容。/derrick/g按照这个正则把str中所有可以匹配的都捕获到,然后统一都替换成指定的字符串"Qian"。

    var str = 'derrick20derrick21';
    str = str.replace(/derrick/g, function () {
        console.log('ok'); // 执行了两次
        console.log(arguments); // 输出和exec执行的结果一样,输出两次
        // 第一次输出第一次exec捕获点击结果,第二次输出第二次exec捕获的结果
        return "Qian";
    });

第二个参数换成一个函数

  1. 匿名函数执行多少次,取决于正则能在字符串中捕获多少次 -> 正则捕获两次,所以匿名函数也执行两次。
  2. 每一次执行匿名函数,里面传递的参数值arguments和通过exec捕获到的结果是非常类似的。即使正则有分组,我们同样可以通过arguments获取到分组捕获的内容。
  3. return: 返回的结果是什么,就相当于把当前这一次大正则捕获的内容替换成返回的内容。
    var str = 'derrick20derrick21';
    str = str.replace(/\d+/g, function () {
        console.log(arguments[0]); // 每次捕获的内容
        return 1; // 把每一次大正则匹配的内容替换成1
    });
    console.log(str);

    var str = 'derrick20derrick21';
    str = str.replace(/\d+/g, function () {
        console.log(arguments[1]); // 获取每一次执行匿名函数,正则捕获到的第一个分组中的内容
        console.log(RegExp.$1); // 和上一行一样的功能
    });

实战
1. 将小写的数字替换成大写的中文数字

    var str = "号码: 12345";
    var ary = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
    str = str.replace(/\d/g, function () {
        /**
         * 第一次执行: 大正则捕获的是1,返回的是ary[1] -> 壹
         * 第二次执行: 大正则捕获的是2,返回的是ary[1] -> 贰
         * ...
         * */
        return ary[arguments[0]];
    });
    console.log(str);

2. 获取一个字符串中出现次数最多的字符,并且获取出现次数

    var str = 'derrickrosekobebryantmichealjordan';
    // 1) 获取每一个字符出现的次数
    var obj = {};
    str.replace(/[a-z]/gi, function () {
        var val = arguments[0];
        /*
        if (obj[val] >= 1) {
            obj[val]++;
        } else {
            obj[val] = 1;
        }
        */
        obj[val] >= 1 ? obj[val]++ : obj[val] = 1;
    });
    // 2) 获取最多出现的次数
    var maxNum = 0;
    for (var key in obj) {
        obj[key] > maxNum ? maxNum = obj[key] : null;
    }
    // 3) 把所有符合出现maxNum次数的都获取到
    var ary = [];
    for (var key in obj) {
        obj[key] === maxNum ? ary.push(key) : null;
    }
    console.log("最多次数的字符: " + ary.toString() + ", 出现了: " + maxNum + "次");

3. 模板引擎实现初步原理

    var str = "my name is {0}, my age is {1}, i come from {2}, i love {3}";
    var ary = ['derrick', '20', 'china', 'javascript'];
    str = str.replace(/{(\d+)}/g, function () {
        return ary[arguments[1]];
    });
    console.log(str);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,204评论 0 4
  • --------------------------正则的作用--------------------------...
    G_whk阅读 608评论 1 5
  • 一、正则初体验 在软件开发中,不管是Java、C#、JS、OC....基本上都会接触到正则,不过大多数人都对正则并...
    iceman_dev阅读 2,636评论 9 28
  • replace: 把原有的字符替换成新的字符,在不使用正则情况下,每执行一次只能替换一个字符,而且每次都是从头开始...
    gaoqizhuhui阅读 889评论 0 0
  • 一个女人,五十四岁,身形瘦弱矮小,一头浅黄褐色的短发微微蜷曲,如果仔细看的话隐约有几缕白发隐匿其中。长着小雀斑的面...
    是翌辰啊阅读 561评论 0 0