正则表达匹配敏感词数组中还有符号的并予以转义

小弟最近在项目中使用较多的正则,才悔悟认知正则的重要性,遇到一个这样的问题

let str = "+VX 测试文本测试文本加哈哈"
let arr = ['+VX','加+']
arr.forEach((item,index) => {
    var pattern = new RegExp('\\'+arr[index],"gi");
    str = str.replace(pattern, match => {
        return '<span style="color:red">'+match+'</span>'
    })
})
console.log(str)

敏感词中有+VX我用了两个转义字符做处理,是否合理
还有敏感词中加+但是正文中的被匹配到了,这个如何解决

阅读 2.7k
3 个回答

那是因为你没有对"加"后面的"+"好进行转义

//转义字符串中的元字符
function escapeMetacharacterOfStr(input) {
            return input.replace(/[-$^()*+.\[\]|\\?{}]/gm, "\\$&");
        }
let str = "+VX 测试文本测试文本加哈哈"
let arr = ['+VX','加+']
arr.forEach((item,index) => {
    var pattern = new RegExp(escapeMetacharacterOfStr(arr[index]),"gi");
    str = str.replace(pattern, match => {
        return '<span style="color:red">'+match+'</span>'
    })
})
console.log(str)
为啥不直接写数组里
    let str = "+VX 测试文本测试文本加哈哈";
    let arr = [/\+VX/, /加\+/];
    arr.forEach((item, index) => {
      str = str.replace(item, function(match) {
        return '<span style="color:red">' + match + '</span>'
      })
    })
    console.log(str)
新手上路,请多包涵
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进