2016-11-16 38 views
0

私はinputのボックスにユーザーがテキストを入力しています。私は入力されたテキストを使用して、大きなテキストファイルの一部を置き換えています。ユーザーは、それはもちろん、特別な意味をなしアンパサンド(&)が続くドル記号($)であるリテラルテキストの代わりにlastMatchになります$&文字を入力した場合

問題が、あります。あなたはここにユーザーの入力を確認でき

:ユーザー入力をシミュレートするために

user input

を、私は次のコードを書いた:

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

last match

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を返し見ることができます。

+0

[JavascriptにRegExp.escape関数がありますか?](http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript) – Laurel

+0

@Laurel私の更新された質問を見てください –

答えて

1

したがって、追加の読書、思考、いくつかの試行、および追加の#FFFFFF毛の後、私はこの問題を解決するために必要なものを得ました。

代わりentire matchのリテラル$&を置くために正規表現を伝えるために、あなたは以下を使用する必要がありますが:

.replace(/\$&/, '$$$$&')

$$$$$$が伝え正規表現エンジン1リテラルのドル記号を、伝えますそれは2つのリテラルドル記号 - >と2つのリテラルドル記号を置き換え文字列内の1つのリテラルドル記号$実際になります。 に続き、&は、の意味を持たない通常のリテラル$&になります。

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=aaaa#$#%^%>$&<%(*".replace(/\$&/, '$$$$&'); 
 
var newPropertiesText = originalString.replace(regexExpression, replaceSting); 
 
console.log(originalString); 
 
console.log(newPropertiesText);
することはでき view the code hereあなたはそれを再生したい場合。

関連する問題