Javascript 在常规espression中的替换字符串中插入$
有人知道为什么吗Javascript 在常规espression中的替换字符串中插入$,javascript,regex,Javascript,Regex,有人知道为什么吗 "why?? <abc> and <a b c> and <a b>".replace( /<([^>]+)>/g, "\$$1" ); 代替 "why?? $abc and $a b c and $a b" 如果没有转义的$,结果与预期一致 "why?? <abc> and <a b c> and <a b>".replace( /<([^>]+)>/g, "$1
"why?? <abc> and <a b c> and <a b>".replace( /<([^>]+)>/g, "\$$1" );
代替
"why?? $abc and $a b c and $a b"
如果没有转义的$,结果与预期一致
"why?? <abc> and <a b c> and <a b>".replace( /<([^>]+)>/g, "$1" )
//"why?? abc and a b c and a b"
“为什么?”和“.replace(/]+)>/g,“$1”)
//“为什么??abc和AB c和AB”
我尝试了各种各样的黑客,包括
"why?? <abc> and <a b c> and <a b>".replace( /<([^>]+)>/g, String.fromCharCode( 36 ) + "$1" );
“为什么?”和“.replace(/]+)>/g,String.fromCharCode(36)+“$1”);
最后,我使用一个函数作为替换字符串(见下文)获得了我想要的输出,但我想知道我做错了什么。提前谢谢
"why?? <abc> and <a b c> and <a b>".replace( /<([^>]+)>/g, function(m,m1,m2,p){return '$' + m1; } )
替换(/]+)>/g,函数(m,m1,m2,p){返回'$'+m1;})
在JavaScript中,反斜杠只是从无法识别的转义序列中删除<代码>\$不是字符串文字中可识别的转义序列,因此:
"\$$1"
表示与此相同:
"$$1"
在replace
replacement字符串中,$$
表示“文字美元符号”
你想要的是:
"$$$1"
其中$
变为$
,$1
变为例如abc
(换句话说:在
replace
replacement字符串中“转义”美元符号的方法是将其加倍,而不是在其前面加反斜杠。)这是grat,谢谢。它仍然不能解释为什么“为什么”和“.replace(/]+)>/g,String.fromCharCode(36)+“$1”)不起作用,但对我来说已经足够了,谢谢:-)@fritzfromlondon:字符串。fromCharCode(36)
是“$”
,所以字符串。fromCharCode(36)+“$1”
是“$$1”
,在替换字符串中,它表示“一个大写的美元符号,后跟一个数字”。
"$$$1"