私は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は、私は2つの$$
で$
を脱出しようとしましたので、それは代わりに特殊な組み合わせのリテラルのドルを意味します:
"EPCDatabase\/EPCdatabase.param\/epc.db.user=aaaa#$#%^%>$&<%(*".replace(/\$&/g, '$$&');
here is the problem ^^
しかしそれは役に立たなかったので、私は\\$\\$
と類似のパターンの異なる組み合わせを試みました。しかし、私は正規表現に簡単な$&
リテラルを送ることができませんでした。
EDIT: この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私の更新された質問を見てください –