问题:

const req = require.context('./modules',true,/\.js/)
let modules = []
req.keys().forEach(modulePath=>{const moduleName = modulePath.replace(/^\.\/(.*)\.\w+/,'$1')modules[moduleName] = req(modulePath).default
})

1. 方法简介

该方法的签名是:replace([RegExp|String],[String|Function])

该方法 返回一个新的字符串,但并不改变字符串本身。

replace(String,String)

let str = '我爱背景天安门';
str = str.replace('背景','北京');
console.log(str);   // 输出结果:我爱北京天安门

此使用方法bug: 只能替换一次 多次替换需要多次调用。

replace(regexg,String)

let str = '我爱背景天安门,但是背景雾霾太严重';
str = str.replace(/背景/g,'北京');
// 输出结果:我爱北京天安门,但是北京雾霾太严重
console.log(str); 

在此处,正则表达式的末尾有个g,它表示match源字符串str中所有匹配项。
这里如果没有g,那么也只能匹配到第一个错别字”背景“,只有加了这个g,才能匹配到所有的”背景“。

replace(regexg,function(){})

let str = '我爱背景天安门,但是背景雾霾太严重';
str = str.replace(/背景/,function(){console.log(arguments);return '北京'
});console.log(str);

解析:

  1. 本例的目的是:把原字符串中的’背景’,替换为’北京’。
  2. 正则表达式没有使用全局匹配符g,所以只替换了源字符串中第一个‘背景’子串,FuncArg只执行了一次。

本例如果想替换所有的‘背景’为‘北京’,只需要让正则表达式后加个g。

let str = '我爱背景天安门,但是背景雾霾太严重';
str = str.replace(/背景/g,function(){console.log(arguments);return '北京'
});console.log(str);

我们可以看到,输出了2个Arguments,因为我们使用全局匹配g后,会match到2个项,所以就执行了2次function。
第一个跟前边一样,第二个arugments的索引位置是10,因为源字符串中第二个‘背景’的索引是10.

参考:
https://blog.csdn.net/qq_46658751/article/details/123390095

其他参考:
https://blog.csdn.net/weixin_43808666/article/details/86610232

/*
* replace的使用
* */
let sStr1 = '讨论一下正则表达式中的replace的用法'
console.log(sStr1.replace(/正则表达式/, '《$&》'))
// 得到:"讨论一下《正则表达式》中的replace的用法"let sStr2 = '讨论一下正则表达式中的replace的用法'
console.log(sStr2.replace(/正则表达式/, '《$`》'))
// 得到:"讨论一下《讨论一下》中的replace的用法"let sStr3 = '讨论一下正则表达式中的replace的用法'
console.log(sStr3.replace(/正则表达式/, '《$\'》'))
// 得到:"讨论一下《中的replace的用法》中的replace的用法"let sStr4 = '讨论一下正则表达式中的replace的用法'
console.log(sStr4.replace(/(正则)(.+?)(式)/, '《$1》$2<$3>'))
// 得到:"讨论一下《正则》表达<式>中的replace的用法"
let str = 'a b'
let result = str.replace(/(\w+)\s(\w+)/gi, '$2 $1')
console.log(result)
//输出 b a
// 这里的$1 $2分别引用正则表达式中第一个和第二个括号匹配的内容
let str2 = 'abcd-abcde-1234'
let num = 1
let result2 = str2.replace(/([a-z]*)-([a-z]*)/gi, function (match, p1, p2, offset, str) {console.log(`第${num}次-match:`, match) // 匹配的内容console.log(`第${num}次-p1:`, p1) // 第一个括号中匹配的内容console.log(`第${num}次-p2:`, p2) // 第二个括号匹配的内容console.log(`第${num}次-offset:`, offset)// 匹配到的字符串的索引(偏移量)console.log(`第${num}次-str:`, str) // 原始字符串num++let temp = [p1, p2].join('+')console.log('结果:', temp)return temp
})
console.log('最终结果:', result2) // abcd+abcde+1234
// 原字符串中 abcd-abcde 被匹配后 被替换为function返回的内容


第一次匹配到了abcd-abcde,return的时候,改成了abcd+abcde
第二次只匹配到的-,此时,只改符号就行了,所以,最终返回: abcd+abcde+1234

注:匹配到谁,该谁,其他的内容原封不动;

如果*改为了+,结果什么样子:

let str2 = 'abcd-abcde-1234'
let num = 1
let result2 = str2.replace(/([a-z]*)-([a-z]+)/gi, function (match, p1, p2, offset, str) {console.log(`第${num}次-match:`, match) // 匹配的内容console.log(`第${num}次-p1:`, p1) // 第一个括号中匹配的内容console.log(`第${num}次-p2:`, p2) // 第二个括号匹配的内容console.log(`第${num}次-offset:`, offset)// 匹配到的字符串的索引(偏移量)console.log(`第${num}次-str:`, str) // 原始字符串num++let temp = [p1, p2].join('+')console.log('结果:', temp)return temp
})
console.log('最终结果:', result2)
// 原字符串中 abcd-abcde 被匹配后 被替换为function返回的内容

js中replace函数的使用相关推荐

  1. JS OOP -02 深入认识JS中的函数

    深入认识JS中的函数: 1.概述,认识函数对象 2.函数对象和其他内部对象的关系 3.将函数作为参数传递 4.传递给函数的隐含参数:arguments 5.函数的apply,call方法和length ...

  2. java js中 function函数报错_浅析JS中对函数function的理解(基础篇)

    正文:我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法.因此,函数名实际上是指向函数对象的指针,不与某个函数绑定.在常见的两种定 ...

  3. JS中Promise函数then的奥秘探究

    JS中Promise函数then的奥秘探究 Promise概述 Promise对象是CommonJS工作组提出的一种规范,目的是为异步操作提供统一接口. 那么,什么是Promises? 首先,它是一个 ...

  4. JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype

    一)函数 A)JS中的函数的定义格式: function add(a,b) { var sum = a+b; document.write("两个数的和是:" + sum); // ...

  5. JS中的函数声明和函数表达式

    JS中的函数声明和函数表达式 1. 函数声明定义一个具有指定参数的函数 函数声明提升, 函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用 hoist ...

  6. js中trim函数_30天中的30个Excel函数:03 – TRIM

    js中trim函数 Yesterday, in the 30XL30D challenge, we took a poke at the lazy brother-in-law function -- ...

  7. 谈谈JS中的函数劫持

    说到劫持,第一反应可能是什么不好的东西.函数劫持并不邪恶,关键是看使用的人.虽然这个概念在前端领域使用较少,但是在安全领域.自定义业务等场景下还是有一定的使用价值的.所以,这一篇文章将会和大家一起去了 ...

  8. Js中匿名函数的理解

    目录 1.js中匿名函数的N种写法 最常见的用法: 2.JavaScript 匿名函数及闭包 2.1 匿名函数 2.1.1 函数的定义 2.1.2 匿名函数的创建 2.2 闭包 2.3 举例 2.4 ...

  9. Js中replace替换全部

    Js中replace替换所有* var t = '***感**谢**有**你***'; var r = t.replace(/\*/g,''); //\为转义字符 g表示全局 console.log( ...

最新文章

  1. 在CentOS 6.3 64bit上安装libunwind库
  2. 王敏捷 - 深度学习框架这十年!
  3. html标签里写js,JS事件(HTML标签内)
  4. C++中的4个类型转换关键字
  5. ABAP物料仓位扩充
  6. 原来国家的名字可以如此浪漫!(ZZ)
  7. springboot-自动配置流程
  8. 我们离DevOps有多远--持续集成思想的延伸
  9. oracle ogg 12安装,Oracle GoldenGate Studio 12.2.1.3安装
  10. ASP.NET 数据绑定操作
  11. Photoshop插件-删除所有亮度通道蒙板-脚本开发-PS插件
  12. TOEFL wordlist 23
  13. 文件或目录损坏且无法读取
  14. XGBoost资料( 多届竞赛冠军获得者 周耀 整理)
  15. 系统思考:VUCA时代下的我们应该怎么做?
  16. 认识一下身边的互联网---经典互联网书籍阅读总结
  17. 别人的计算机网络看不到,局域网内看不到别人的电脑怎么办
  18. 【芝麻IP代理】如何利用Python实现简易音乐播放器
  19. 2021年美容师(中级)考试技巧及美容师(中级)实操考试视频
  20. stm32入门实验代码编写步骤整理

热门文章

  1. python自制小游戏_教你用Python自制拼图小游戏,一起来制作吧
  2. 2021河南省高考成绩位次查询,2021年河南高考排名位次查询系统,河南高考排名查询入口...
  3. 基于格的 Hash 函数(SWIFFT) BKW 算法
  4. Rtos的调研分析报告
  5. SSM框架解决QQ邮箱激活535 Error: ÇëʹÓÃÊÚȨÂëµÇ¼¡£ÏêÇéÇë¿´及端口25被占用问题
  6. JAVA-面向过程编程
  7. Delphi 2005 发布!
  8. 防火墙技术及其在校园网中的设计方案
  9. 有一种感觉叫清风细雨
  10. 北京市专精特新中小企业认定要求及流程,补贴60万