如果没有将“特殊”字符添加到要替换的字符列表的对象中,则有一个代码可以完全满足。下面的示例将按预期返回:front%end.
let sortArr = {
" ": "-",
"-": "%",
"!": "i33",
};
let str = 'front-end'
let re = new RegExp(Object.keys(sortArr).join("|"),"gi");
str = str.replace(re, function(matched) {
console.log('matched ', matched);
return sortArr[matched.toLowerCase()];
});
alert(str);
相同的示例,但添加例如$:
let sortArr = {
" ": "-",
"-": "%",
"!": "i33",
"$": "i36",
};
let str = 'front-end'
let re = new RegExp(Object.keys(sortArr).join("|"),"gi");
str = str.replace(re, function(matched) {
console.log('matched ', matched);
return sortArr[matched.toLowerCase()];
});
alert(str);
结果:front%endundefined。我究竟做错了什么?沙盒的链接在这里。
$- 特殊字符“行尾”。在这里你有它,它试图用 ... 替换行尾matched,这不再是一个字符$第一次尝试
\\$,结果已经排除了行尾的替换,但如果你真的需要替换符号,它就不起作用$:尝试 2:在 RegExp 的行中,在所有特殊字符之前,替换
\:.replace(/(\$|\?|\+)/g, "\\$1")- 在替换中,在被替换的行中,$1指的是第一个捕获组内的匹配项(括号内的内容)。在正则表达式中,美元符号是标记文本结尾的特殊字符。
要在文本中搜索美元符号本身,您需要“转义”它,即使用“\$”代替“$”。