3. 手写一个replace

重写字符串内置方法replace

  • 1.正则在字符串中匹配几次,我们传递的回调函数就会被执行几次(前提:正则设置了global修饰符)
  • 2.每一次执行回调函数,都把当前正则匹配的信息(既有大正则,也有小分组的)传递给回调函数
  • 3.还要接收回调函数的返回值,返回的是啥内容,就要把当前字符串中正则匹配这一部分内容替换成啥
~ function () {
    //=>处理字符串:把字符串中的某一项替换成另外一项
    function handle(str, val1, val2) {
        let index = str.indexOf(val1);
        return str.substring(0, index) + val2 + str.substring(index + val1.length);
    }

    function replace(reg, callback) {
        let _this = this.substring(0),
            isGlobal = reg.global,
            arr = reg.exec(this);
        while (arr) {
            //=>捕获到的结果是数组(执行回调函数,把捕获的结果传递给它);还要接收回调函数执行的返回值,用返回值替换字符串中当前正则匹配的内容;
            if (typeof callback === "function") {
                let res = callback.apply(null, arr);
                _this = handle(_this, arr[0], res);
            }
            arr = reg.exec(this);
            //=>不设置GLOBAL的情况执行一次
            if (!isGlobal) break;
        }
        return _this;
    }
    String.prototype.replace = replace;
}();
let str = "{0}年{1}月{2}日",
    arr = ['2019', '09', '03'];
str = str.replace(/\{(\d)\}/g, function (content, group1) {
    return '@#' + arr[group1];
});
console.log(str);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,098评论 0 1
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,315评论 0 3
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • JavaScript语言精粹 前言 约定:=> 表示参考相关文章或书籍; JS是JavaScript的缩写。 本书...
    微笑的AK47阅读 591评论 0 3
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,465评论 0 5