我有一個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請看我最新的問題 –