検索

ホームページ  >  に質問  >  本文

javascript - ^ と $ を使用してから g を使用すると、js の正規表現がおかしくなりますが、エラーは報告されません

リーリー

最初の console.log 出力がこのようになっているのはなぜですか?

伊谢尔伦伊谢尔伦2863日前517

全員に返信(2)返信します

  • 世界只因有你

    世界只因有你2017-05-19 10:42:32

    正規表現が実行されると、RegExp オブジェクトの lastIndex が変更される可能性があります。

    test メソッドは、文字列が特定の規則に一致するかどうかを検出するために使用され、文字列に規則に一致するテキストが含まれている限り、メソッドは true を返し、それ以外の場合は false を返します。

    実際、正規表現にグローバル フラグ (パラメータ g 付き) がある場合、テスト メソッドは次のように正規オブジェクトの lastIndex 属性の影響も受けます。 リーリー

    この影響は、exec メソッドの説明で分析されます。

    exec メソッドは、正規表現に対する文字列の一致を検出するために使用され、一致するテキストが見つかった場合は結果の配列を返し、それ以外の場合は null を返します。

    構文: exec(string)

    exec メソッドによって返される配列には、index と input という 2 つの追加属性が含まれており、この配列には次の特性があります。

    0番目の項目は正規表現で取得したテキストを表します

    • 1st~n 番目の項目は 1~n 番目の後方参照を表し、1~n 番目のグループでキャプチャされたテキストを指します。 RegExp.$ + "Number 1~n" を使用してグループ内のテキストを取得できます。順番に

    • index は一致する文字列の最初の位置を表します

    • input は取得される文字列を表します

    • 正規表現にグローバルフラグ「g」が付いているかどうかに関係なく、exec の動作は同じですが、正規表現オブジェクトの動作がどのように変化するかについて詳しく説明します。違う

    • 正規表現オブジェクトがreg、検出された文字がstring、reg.exec(string)の戻り値がarrayであると仮定します。

    regにグローバルマーク「g」が含まれている場合、reg.lastIndex属性は元の文字列内で一致した文字列の末尾以降の位置、つまり次の一致が開始される位置を表します。 == array.index (開始位置と一致) + array[0].length (文字列の長さと一致) 以下のように:

    リーリー

    取得が続くと、array.index の値が増加します。つまり、reg.lastIndex の値も同期的に増加します。したがって、exec メソッドを繰り返し呼び出すことで、文字列内のすべての一致を調べることもできます。テキスト。exec メソッドがテキストと一致しなくなると、null が返され、reg.lastIndex プロパティが 0 にリセットされます。

    以下に示すように、上記の例に従って、上記が正しいかどうかを確認するためにコードの実行を続けます。 リーリー

    上記のコードでは、exec メソッドが繰り返し呼び出されると、reg.lastIndex プロパティは最終的に 0 にリセットされます。

    問題のレビュー

    テストメソッドの説明で、正規表現にグローバルフラグgがあると、上記のテストメソッドの実行結果がreg.lastIndexの影響を受けるという問題を残しました。 reg.lastIndex 以降、値は常に 0 であるとは限らず、文字列内の一致が完了した後に新しい文字列の取得を開始する場合は、lastIndex 属性を手動でリセットする必要があります。 0. 次のエラーを回避してください:

    リーリー

    上記のコードの正しい実行結果は「123456」であるため、2回目のexecメソッドを実行する前に「reg.lastIndex = 0;」を追加することをお勧めします。

    regにグローバルフラグ「g」が含まれていない場合、execメソッドの実行結果(配列)はstring.match(reg)メソッドの実行結果と全く同じになります。

    このスニペットは、正規表現フロントエンド ユーザー マニュアル | louis blog から引用しています。役に立った場合は、「いいね!」をお願いします。

    返事
    0
  • 巴扎黑

    巴扎黑2017-05-19 10:42:32

    返事
    0
  • キャンセル返事