给包含多个特殊字符的字符串做特殊字符转义的简单方法

2019-04-18 09:51:06   作者:MangoCool   来源:MangoCool

使用场景:

搜索功能,当搜索字符串中有包含多个特殊字符时,使用js的replace逐一替换,或者replaceAll统一替换时会出现不同情况的错误

使用replace逐一替换:

示例:

keyword = keyword.replace(specChar[i], "\\"+specChar[i]);

错误:

SyntaxError: Invalid regular expression: /(\\\)/: Unterminated group

使用replaceAll统一替换

示例:

keyword = keyword.replaceAll(specChar[i], "\\"+specChar[i]);

出错:

SyntaxError: Invalid regular expression: /\/: \ at end of pattern

理解:单个字符的替换,两种方式都没有问题,一旦有多个特殊字符须要替换,就出错了,很明显问题都出在,每次替换后的字符中加入了新的特殊字符(转义字符“\”)

解决方案:

var specChar = [ "\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|", "'", "\"",];

function formatForKeyword(keyword) {
    var starttime = new Date().getTime();
    let flag = false;
    for(var i=0; i<specChar.length; i++) {
        if (keyword.indexOf(specChar[i]) >= 0) {
            flag = true;
            break;
        }
    }
    if(flag) {
        let keywordArr = keyword.split('');
        for(let i=0; i<keywordArr.length; i++) {
            if(specChar.indexOf(keywordArr[i]) >= 0) {
                keywordArr[i] = "\\" + keywordArr[i];
            }
        }
        keyword = keywordArr.join("");
    }
    console.log("转义time: " + (new Date().getTime() -starttime));
    return keyword;
}

使用效果:

方法虽然比较粗暴,目前使用没问题,有更好的办法记得@我,感谢!

标签: replaceAll replace 替换 特殊字符 转义 js

分享:

关于我

一个喜欢唱歌,热衷旅行,爱好电子产品的码农。没事,跟三五好友吼上几嗓子,约上几个背着行囊去露营或者宅在家里抱着孩子敲代码。

座右铭:当你的才华还撑不起你的野心的时候,你就应该静下心来学习,永不止步!

            人生之旅历途甚长,所争决不在一年半月,万不可因此着急失望,招精神之萎葸。


Copyright 芒果酷(mangocool.com) All rights reserved. 湘ICP备14019394号

免责声明:本网站部分文章转载其他媒体,意在为公众提供免费服务。如有信息侵犯了您的权益,可与本网站联系,本网站将尽快予以撤除。