我有一个input
框,用户可以在其中键入文本。我正在使用输入的文本并替换大文本文件的一部分。
的问题是,如果用户输入的字符$&
它会导致lastMatch代替文字文本这当然是后跟一个符号(&
)没有任何特殊意义的美元符号($
)。
你可以看到用户输入的位置:
为了模拟用户输入,我写了下面的代码:
var originalString = "# Mandatory parameter\n#EPCDatabase/EPCdatabase.param/epc.db.user=\n# Mandatory parameter";
var regexExpression = new RegExp('#EPCDatabase\/EPCdatabase.param\/epc.db.user=.*$', "im");
var replaceSting = "EPCDatabase\/EPCdatabase.param\/epc.db.user=test#$#%^%>$&<%(*"
var newPropertiesText = originalString.replace(regexExpression, replaceSting);
console.log(originalString);
console.log(newPropertiesText);
的问题是,从字面上而不是追加$&
,它将追加lastM ATCH,并且创造了newPropertiesText
如下:
As explained here,我试图逃避$
两个$$
,因此这将意味着一个文字美元,而不是特殊组合:
"EPCDatabase\/EPCdatabase.param\/epc.db.user=aaaa#$#%^%>$&<%(*".replace(/\$&/g, '$$&');
here is the problem ^^
但这并没有帮助,所以我尝试了\\$\\$
和类似模式的不同组合。但我无法发送到正则表达式一个简单的$&
文字。
编辑: 使用此功能escape
没有解决的问题:
RegExp.escape= function(s) {
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};
var originalString = "# Mandatory parameter\n#EPCDatabase/EPCdatabase.param/epc.db.user=\n# Mandatory parameter";
var regexExpression = new RegExp('#EPCDatabase\/EPCdatabase.param\/epc.db.user=.*$', "im");
var replaceSting = RegExp.escape("EPCDatabase\/EPCdatabase.param\/epc.db.user=aaaa#$#%^%>$&<%(*");
var newPropertiesText = originalString.replace(regexExpression, replaceSting);
console.log(originalString);
console.log(newPropertiesText);
你可以看到它仍返回lastMatch
。
[Javascript是否有RegExp.escape函数?](http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript) – Laurel
@Laurel请看我最新的问题 –