[英]Why do I need “$$$” (three dollar) if I want “$$” (two dollar) as replace string in Java- / coffescript-
上一页:我有自己的库,在其中使用Coffescript中的命名空间模块和类。 这就像在Ruby“ namspace :: module :: class”中一样,因为不允许使用“ ::”作为类名,所以我将Module::ClassName
替换为Module$$ClassName
> replace(/\\$\\$/g,'::')
,很好。
现在我很努力地做相反的事情: replace(/::/g,'$$')
导致Module$ClassName
只有一个美元($)
所以我打了一下
a="a:a::b:b::c:c"
a.replace(':','$') #-> "a$a::b:b::c:c" clear only first
a.replace(/:/g,'$') #-> "a$a$$b$b$$c$c" better, but wrong we want '::' only
a.replace(/::/g,'$$') #-> "a:a$b:b$c:c" suprise; where is the 2nd Dollar?
a.replace("::",'$$') #-> "a:a$b:b::c:c" try no regexp since dollar has an other meaning? fails only one $
a.replace(/::/g,'\$\$') #-> "a:a$b:b$c:c" ESC the guys? nope
a.replace(/::/g,"\\$\\$") #-> "a:a\$\$b:b\$\$c:c" ESC ESC to get into the deeper?
# and then replace(/\\\$/g,'$') ? overkill
a.replace(/::/g,'$$$') #-> "a:a$$b:b$$c:c" bingo, but why?
# trying more
a.replace(/::/g,'$$$$') #-> "a:a$$b:b$$c:c" 2 get one? one stays alone
a.replace(/::/g,'$$$$$') #-> "a:a$$$b:b$$$c:c" seems so
毕竟是逻辑(而且我想知道为什么我以前从未有过这个问题)。
因此,我认为(肯定)“ $$”转为一个“ $”,因为“ $ n”引用了匹配的组- 即使没有正则表达式?
即使您没有任何捕获组,也可以在替换字符串中使用$
。 $&
表示正则表达式匹配的所有内容, $`
表示匹配前的所有内容,而$'
表示匹配后的所有内容。 因此,始终会对$
进行特殊处理,而$$
只是一个$
。
原因是$是replace
的第二个参数中的特殊字符。 请参阅https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace中的 “将字符串指定为参数”
如果我想要“ $$”(两美元)作为替换字符串,为什么我需要“ $$$”(三美元)
实际上,您在替换字符串中需要4 $
。 要用文字$
替换,您需要两个$
,因为一个$
“逸出”另一个。
因此,您需要
var a = "some::var"; a = a.replace(/::/g,'$$$$'); // this will replace `::` with `$$` document.body.innerHTML = a;
如果添加一个奇数$
,它将被视为文字,或被忽略,或特定浏览器想要与此“通配”转义符号进行的任何操作。 因此,在替换模式中使用偶数的$
s是更安全的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.