踩坑由来:webpack配置环境变量,定义格式:project_name: '"产品1"',然后有个需求就是给不同的合作伙伴打出不同产品名字的包。我全局搜索代码发现有很多地方都写死了“产品0”,脑子立马让我浮现一个方案:把project_name存到store里面,然后把用到的地方都采用$store.getters.product_name替换掉,再仔细一下这种方法改动量太大所以放弃了。由于我前段时间搞了个webpack条件编译的loader插件,瞬间让我想到了写一个webpack 的loader不就轻松搞懂了。嗯... 巴拉巴拉,开开心心瞬间搞完,把项目运行起来后怎么用到的地方多了一个单引号,正在匹配单引号失效的问题就出现了...

踩坑导火线

使用正则把前后单引号去掉

替换无效代码

String.prototype.trim = function (char) {
	let reg = `/(^${char})|(${char}$)/g`;
  let result = this.replace(reg, "");
  console.log("reg:" + reg);
  console.log("result:" + result);  
  return result;
let content = "'abc'";
content.trim("'");
//输出结果:
//reg:/(^')|('$)/g
//result:'abc'

替换成功代码

String.prototype.trim = function (char) {
  let reg = new RegExp(`(^${char})|(${char}$)`,'g');
  let result = this.replace(reg, "");
  console.log("reg:" + reg);
  console.log("result:" + result);  
  return result;
let content = "'abc'";
content.trim("'");
//输出结果:
//reg:/(^')|('$)/g
//result:abc

最后对比:

由于无法断点调进string的replace方法,也就不知道replace里面到底对这两种正则处理有何不同,如果你知道为什么或者怎么调进String的replace,请留言告诉我。谢谢~

  • 尽量采用RegExp类创建对象使用正则,避免直接//来使用正则
  • 以上:如发现有问题,欢迎留言指出,我及时更正

    Potter 前端工程师 17.8k
    粉丝