Javascript 为什么string.replace()不适用于包含括号的字符串?
下面是将html粗体标记添加到我们传递的子字符串的函数 函数boldString(str,find){ var re=新的RegExp(查找“g”); 返回str.replace(re,“+find+”); } log(粗体字符串(“这是为了测试目的”,“测试”)); log(粗体字符串(“使用括号进行测试)”,“(括号)”)代码>,因为Javascript 为什么string.replace()不适用于包含括号的字符串?,javascript,regex,Javascript,Regex,下面是将html粗体标记添加到我们传递的子字符串的函数 函数boldString(str,find){ var re=新的RegExp(查找“g”); 返回str.replace(re,“+find+”); } log(粗体字符串(“这是为了测试目的”,“测试”)); log(粗体字符串(“使用括号进行测试)”,“(括号)”),因为(和)(以及其他几个字符)在正则表达式中有特殊的含义,并且您没有对它们进行转义。您需要传入“\\(括号\\”)”:第一个反斜杠转义字符串文本中的第二个,以便字符
(
和)
(以及其他几个字符)在正则表达式中有特殊的含义,并且您没有对它们进行转义。您需要传入“\\(括号\\”)”
:第一个反斜杠转义字符串文本中的第二个,以便字符串实际包含一个反斜杠;字符串中的反斜杠转义(
和)
例如:
函数boldString(str,find){
var re=新的RegExp(查找“g”);
返回str.replace(re,“+find+”);
}
log(粗体字符串(“这是为了测试目的”,“测试”));
log(粗体字符串(“使用括号进行测试)”,“\\(括号\\”)代码>,因为(
和)
(以及其他几个字符)在正则表达式中有特殊的含义,并且您没有对它们进行转义。您需要传入“\\(括号\\”)”
:第一个反斜杠转义字符串文本中的第二个,以便字符串实际包含一个反斜杠;字符串中的反斜杠转义(
和)
例如:
函数boldString(str,find){
var re=新的RegExp(查找“g”);
返回str.replace(re,“+find+”);
}
log(粗体字符串(“这是为了测试目的”,“测试”));
log(粗体字符串(“使用括号进行测试)”,“\\(括号\\”)代码>括号是正则表达式中的保留符号。例如,
,+
,*
,[]
等,您会遇到同样的问题
在用它构造regexp之前,您需要先创建一个。(另外,最好使用.replace()
s函数接受表单并使用实际匹配字符串。)
函数escapeRegExp(str){
返回str.replace(/[\-\[\]\/\{\\}(\)\*\+\?\.\\\^\$\\\\\\\\\\;]/g,“\$&”);
}
函数boldString(str,find){
var re=new RegExp(escapeRegExp(find),'g');
返回str.replace(re),函数(m){
返回“+m+”;
});
}
括号是正则表达式中的保留符号。例如,
,+
,*
,[]
等,您会遇到同样的问题
在用它构造regexp之前,您需要先创建一个。(另外,最好使用.replace()
s函数接受表单并使用实际匹配字符串。)
函数escapeRegExp(str){
返回str.replace(/[\-\[\]\/\{\\}(\)\*\+\?\.\\\^\$\\\\\\\\\\;]/g,“\$&”);
}
函数boldString(str,find){
var re=new RegExp(escapeRegExp(find),'g');
返回str.replace(re),函数(m){
返回“+m+”;
});
}
需要反斜杠。可能需要反斜杠的副本。转义表达式xp(find)
的可能副本可以简化为find。替换(/\W/g,\\$&”)
/[-\[\]\/\\\\\\\\\\\+\(\)\\\\\\\\\\\\\\\\\\\\\\$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。该函数只是我链接的问题中的公认答案:)escapeRegExp(find)
可以简化为find.replace(/\W/g,“\\$&”)
/[\-\[\]\/\\\\\\\(\)\*\+\\\?\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。该函数只是我链接的问题中的公认答案:)
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
function boldString(str, find) {
var re = new RegExp(escapeRegExp(find), 'g');
return str.replace(re, function (m) {
return '<b>' + m + '</b>';
});
}