使用场景:
搜索功能,当搜索字符串中有包含多个特殊字符时,使用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
分享:
崇尚极简,热爱技术,喜欢唱歌,热衷旅行,爱好电子产品的一介码农。
联系QQ:58742094
联系电话:
工作邮箱:
当你的才华还撑不起你的野心的时候,你就应该静下心来学习,永不止步!
人生之旅历途甚长,所争决不在一年半月,万不可因此着急失望,招精神之萎葸。
Copyright 2015- 芒果酷(mangocool.com) All rights reserved. 湘ICP备14019394号
免责声明:本网站部分文章转载其他媒体,意在为公众提供免费服务。如有信息侵犯了您的权益,可与本网站联系,本网站将尽快予以撤除。