为什么我需要“$$$"(三美元)如果我想要“$$"(两美元)作为Java中的替换字符串
Why do I need "$$$" (three dollar) if I want "$$" (two dollar) as replace string in Java- / coffescript-
Pre:我有自己的库,在那里我使用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"引用了匹配的组-,但即使中没有regexp
即使没有任何捕获组,也可以在替换字符串中使用$
。$&
表示正则表达式匹配的所有内容,$`
表示匹配前的所有内容和$'
表示匹配后的所有内容。所以$
总是被特殊处理的,而$$
意味着只有一个$
。
replace
的第二个参数中的一个特殊字符。请参阅中的"将字符串指定为参数"https://developer.mozilla.org/en-US/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是更安全的。
相关文章:
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- 为什么我需要“$$$"(三美元)如果我想要“$$"(两美元)作为Java中的替换字符串
- jquery“.when"美元;功能没有按预期工作
- 美元(“.floater").floatingFixed不是一个函数
- jQuery“.cookie"美元;不是函数
- 这难道不行吗?美元.getScript(“alert.js");
- “translateProvider.useLocalStorage"美元;原因(未捕获的错误)
- (美元).attr(“name");只对第一个元素有效
- $(& # 39;:复选框# 39;)或美元(& # 39;输入(type =“checkbox") & # 3