[英]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.