我有一个变量用于构建JavaScript函数调用,JavaScript有.replace()
用span和onclick事件包围文本行。 .replace()
部分如下所示:
code.replace(/(\d{4}\s+)?(LOCAL|PARAMETER|GLOBAL)\s+USING\s+([\S]+)/g,
"<span class=\"natprint_popup\" onclick=\"getNaturalCode('"
+ lib
+ "','$3','@#test_prod_qual|',0,'Y'); return false;\">$&</span>");
唯一的问题是变量lib
在某些时候最后包含$
;例如,lib == DPDRI$
。这导致我页面上的JavaScript中断,我得到的输出在lib
结束时中断,并将其余的Javascript函数参数显示为纯文本:
,'DPDPDRNO','TEST',0,'Y'); return false;">
我几天来一直在寻找无用的答案。我已经尝试过lib.replace(/\$/g, "\\$");
并且\$
已成功进入变量,但它仍然会破坏我的代码。似乎JavaScript引擎试图将$
末尾的lib
解释为捕获的匹配,并且它正在让它爆炸。任何人都有任何想法如何使这项工作?
答案 0 :(得分:2)
请参阅MDC上Specifying a string as a parameter section的replace()
documentation:
替换字符串可以包含以下特殊替换模式:
Pattern Inserts $$ Inserts a "$". ... $' Inserts the portion of the string that follows the matched substring. ...
请注意,由于您的变量内容作为单引号包装参数插入到您从onclick调用的函数中,因此总是后跟一个' - 所以当它以$结尾,你将无意中创建一个替换模式:
... onclick=\"getNaturalCode('DPDRI$' ...
现在,您可以只更改引用该特定参数的方式。但为了安全起见,你应该真正逃脱$符号:
+ lib.replace(/\$/g, "$$$$")
上述修改将在插入替换字符串之前将“DPDRI $”转换为“DPDRI $$”,允许最终替换包含文字$。