javascript - 如果我想要 "$$$"(两美元)作为 Java-/coffescript- 中的替换字符串,为什么我需要 "$$"(三美元)

标签 javascript regex

Pre:我有自己的库,我在其中使用 Coffescript 中的命名空间模块和类。这就像在 Ruby “namspace::module::class” 中一样,因为不允许使用 '::' 作为我替换的类名 Module::ClassNameModule$$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”引用了匹配的组 - 但即使没有正则表达式?

最佳答案

即使您没有任何捕获组,也可以在替换字符串中使用 $$& 指的是正则表达式匹配的所有内容,$` 指的是匹配之前的所有内容,$' 指的是匹配之后的所有内容匹配。因此 $ 总是被特殊对待,而 $$ 表示只是一个 $

关于javascript - 如果我想要 "$$$"(两美元)作为 Java-/coffescript- 中的替换字符串,为什么我需要 "$$"(三美元),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33922077/

相关文章:

javascript - 安装 Crossrider 扩展的调试扩展失败 - Firefox

javascript - 通过访问其他域覆盖 iframe/跨域中的 css

python - 使用解析将 ** 运算符更改为幂函数?

php - 为什么要同时使用 str_replace() 和 preg_replace()?

R strip拆分数据框中的一列

javascript - 发布到GEOJSON Google 将数据映射到我的远程服务器上的 json 文件

javascript - 将字符串转换为有效的 json 对象

javascript - Thor 等效或类似的 Javascript 脚本框架?

c# - 正则表达式替换排除第一个和第 n 个字符

php - 如何正则表达式匹配具有不同结尾的文本?