当搜索文本中含有特殊符号则需要转义,否则无法使用正则进行全局匹配。以下方法主要是依靠改变正则表达式实现。
let str = '这是一条含有*特殊符\\号的(句子)。';
let searchText = '\\';
let specialStrArr = ['*', '.', '?', '$', '|', '+', '^', '(', ')', '[', ']', '{', '}'];
let reg = '';
let newStr = '';
if (str != '') {
searchText = dealStr(searchText); //如果searchText中包含\需单独处理
specialStrArr.forEach((t) => {
if (searchText.indexOf(t) != -1) {
searchText = searchText.replace(t, '\\' + t);
}
})
reg = new RegExp("(" + searchText + ")", "ig");
newStr = str.replace(reg,"<span style='color: #D74A45'>$1</span>");
}
function dealStr(str) {
let strArr = str.split('');
strArr.forEach((t,i)=>{
if(t=='\\'){
strArr[i] = '\\\\';
}
})
return strArr.join('');
}