私はJavaScriptで次のものを使用して置換しようとしています:
r = "I\nam\nhere";
s = r.replace("\n"," ");
しかし、私に与える代わりに
私はここにいます
の値としてs
、同じものを返します。
どこが問題なの?
私はJavaScriptで次のものを使用して置換しようとしています:
r = "I\nam\nhere";
s = r.replace("\n"," ");
しかし、私に与える代わりに
私はここにいます
の値としてs
、同じものを返します。
どこが問題なの?
他の人が述べたように、正規表現にはグローバルフラグがありません。正しい表現は、他の人があなたに与えたもののようなものでなければなりません.
var r = "I\nam\nhere";
var s = r.replace(/\n/g,' ');
最初からあったものとの違いを指摘したい。あなたは次のステートメントを使用していました
var r = "I\nam\nhere";
var s = r.replace("\n"," ");
ステートメントは確かに正しく、文字 \n の 1 つのインスタンスを置き換えます。これは別のアルゴリズムを使用します。置換する文字列を指定すると、最初に見つかった文字列が検索され、単純に 2 番目の引数として指定された文字列に置き換えられます。正規表現を使用すると、一致する文字を探すだけでなく、複雑な一致構文を記述でき、1 つまたは複数の一致が見つかった場合は置換されます。JavaScript の正規表現の詳細については、ここw3schoolsを参照してください。
たとえば、いくつかの異なるタイプのファイルからの入力を解析するために、作成したメソッドをより一般的にすることができます。オペレーティング システムの違いにより、改行が必要な場所に \n または \r を含むファイルが存在することは非常に一般的です。両方を処理できるようにするには、正規表現のいくつかの機能を使用してコードを書き直すことができます。
var r = "I\ram\nhere";
var s = r.replace(/[\n\r]/g,' ');
使用するs = r.replace(/\\n/g," ");
javascript置換コードの「g」は「貪欲」を表します。これは、可能であれば置換が複数回行われる必要があることを意味します。
g
問題は、フラグを使用してすべての一致を置き換える必要があることです。デフォルトでreplace()
は、最初に見つかった一致にのみ作用するためです。
var r = "I\nam\nhere",
s = r.replace(/\n/g,' ');
ただし、フラグを使用するg
には、正規表現のアプローチを使用する必要があります。
ちなみに、変数を宣言するときは を使用してくださいvar
。そうしないと、作成した変数がすべてグローバルになり、後で問題が発生する可能性があります。
.replace()
グローバル一致フラグが必要です:
s = r.replace(/\n/g, " ");
以下を使用できます。
var s = r.replace(/\n/g,' ').replace(/\r/g,' ');
異なるSOは異なる方法を使用して「改行」を設定するためです。たとえば、Mac Unix Windowsの場合、この後、他の関数を使用して空白を正規化できます。