JS字符串replace()方法全局替换变量踩坑

项目中有个需要将文字表情替换成图片的需求.

例如: [微笑] >>> 😀

本想着只是替换一下文字, 很简单

结果做的时候发现, 还是有不少问题的:

1) 字符串的replace()函数不能直接全局替换变量, 需要先定义一个正则 

let str = aaa;
let name = a;
let regExp = new RegExp(name, 'g');
console.log(str.replace(regExp, 'b')); // bbb

2) 写正则的时候又发现了新问题:需要替换的变量不能包含 [ ] 这类特殊符号

否则会变成这样...

let str = '[微笑]';
let name = '[微笑]';
let newName = '😀';
let regExp = new RegExp(name, 'g');
console.log(str.replace(regExp, newName)); // [😀😀]

3) 特殊符号需要在正则表达式里转义一下, 然后又发现变量里面不能直接写反斜杠\... 

let name = "\[aaa]";
console.log(name); // [aaa]
// 需要输入双斜杠才行
let name2 = "\\aaa";
console.log(name2); // \[aaa]

 4) 最后得出解决方案..

let str = '[微笑]';
let name = '[微笑]';
let name2 = '\\[微笑\\]';
let newName = '😀';
let regExp = new RegExp(name, 'g');
let regExp2 = new RegExp(name2, 'g');
console.log(str.replace(regExp, newName)); // [😀😀]
console.log(str.replace(regExp2, newName)); // 😀

困惑了很久终于解决了。。
仔细一看并不复杂
写个文章希望能帮到和我一样遇到这种问题的人吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值