簡體   English   中英

如果我想用“ $$”(兩美元)作為Java- / coffescript-中的替換字符串,為什么我需要“ $$$”(三美元)

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM