3

reg次のスニペットで、 がどのように定義されているか説明してもらえますか?

str = "This is the first line.\n" + 
      "This is the second line.\n" + 
      "This the third line.\n";
reg = /^.*$/gm;

var mtch = str.match(reg);

別の行にある 3 つの文を分割する必要がありますが、分割するために定義されたパターンがわかりません。

それは(私はそうだと思います!)文字列はで始まり、複数回発生する可能性がある.と言っています。実際に置くときに.何を入れる必要がありますか?*global flag

4

4 に答える 4

3

「m」フラグは、改行の最初と最後で ^ と $ アンカーが一致するように JavaScript に指示します。したがって、この正規表現は、任意の文字が 1 行に 0 回以上含まれるすべてのケース (「g」フラグ) に一致します。

于 2013-02-24T11:42:20.123 に答える
3

グローバルな複数行一致

g 修飾子は、単に一致するすべての文字列を返すことを意味します

m 修飾子はdocsで最もよく説明されています:

開始文字と終了文字 (^ と $) は、複数行にわたって機能するものとして扱います (つまり、入力文字列全体の最初または最後だけでなく、各行の最初または最後 (\n または \r で区切られた) に一致します)。

そのため、質問の正規表現は、改行文字間のすべての文字列に一致します。

str = "This is the first line.\n" + 
  "This is the second line.\n" + 
  "This the third line.\n";

str.match(/^.*$/gm)
//["This is the first line.", "This is the second line.", "This the third line.", ""]

m 修飾子は必要ありません

開始アンカーと終了アンカーは実際には必要ありません。より単純でほぼ同等の正規表現は次のようになります。

str.match(/.+/g)
//["This is the first line.", "This is the second line.", "This the third line."]

この場合、は、改行を除く.+1 つ以上の文字の任意の文字列と一致します。正規表現の一致はデフォルトで貪欲であり、可能な限り一致するように展開されます。そのため、文字列が行に分割されます。応答に空の文字列がないことに注意してください。

これは正規表現を必要としません

この正規表現が何をしているように見えるかという目的のために、正規表現をまったく使用しない方がよいでしょう:

str.split("\n");
//["This is the first line.", "This is the second line.", "This the third line.", ""]
于 2013-02-24T11:53:42.273 に答える
1

実際にグローバル フラグを設定しているときに * を設定する必要は何ですか?

はパターンの*一部 (一致に使用) であり、g「最初の結果だけでなく、すべての結果」を意味する修飾子です。

/^.$/m;1文字のみの行を返します(最初に見つかったもの)

/^.*$/m;行を返します(最初に見つかった行)

/^.$/gm;1文字だけですべての行を返します

/^.*$/gm;すべての行を返します

于 2013-02-24T12:12:35.600 に答える
0

ドット (.) は任意の文字を意味します。*は0以上を意味します。「m」修飾子は複数行です。

于 2013-02-24T11:37:10.030 に答える