在开发聊天室,做表情匹配的时候遇到如下问题
var str = '今晚不去了[坏笑]有人请吃饭';
var reg = new RegExp('\[坏笑\]');
var result = str.replace(reg,'*');
alert(result);
上述代码的执行结果是:
不知道大家看出来问题了没。
我的正则表达式本意是要将 [坏笑] 完整的替换掉,由于中括号[]在正则规则中表示原子表,故转义了一下,但就结果来看,依旧是按照原子表的意思去用了。
这个问题很奇怪,按照官方手册说法应该是将中括号成功转义了,但意料之外的结果就在眼前。经过后盾人大牛向老师的提醒,用两个反斜线才转义成功,没找到理论根据,但的确可行,如果以后遇到类似问题可以参考本次解决办法。
最后的写法如下:
var str = '今晚不去了[坏笑]有人请吃饭';
var reg = new RegExp('\\[坏笑\\]');
var result = str.replace(reg,'*');
alert(result);
正确结果:



![易语言调用精易VIP模块后运行报错“发现不可识别的[程序加固段],其数据已被跳过!”的解决办法](https://www.sunqizheng.com/wp-content/uploads/2020/04/TIM截图20200404015908.png)


