ホームページ > ウェブフロントエンド > jsチュートリアル > 正規表現とグローバル フラグを使用して重複する一致を取得するにはどうすればよいですか?

正規表現とグローバル フラグを使用して重複する一致を取得するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-13 02:24:16
オリジナル
552 人が閲覧しました

How Can I Get Overlapping Matches with Regular Expressions and the Global Flag?

正規表現を使用した重複する文字列の一致

グローバル フラグ (/g) を指定した正規表現を使用して文字列を一致させる場合、次のようにすることができます。重複する一致が期待どおりに返されない場合があります。たとえば、文字列 "12345" では、/d{3}/g を使用して一致させると、["123", "234", "345"] ではなく "123" のみが一致します。

理由この動作は、グローバル フラグと一致する正規表現の性質に基づいているためです。正規表現エンジンは、一致した部分文字列を読み取って使用し、そのインデックスを一致の直後の位置に進めます。この場合、「123」と一致した後、インデックスは位置 4 に移動し、その後の一致には「45」だけが残ります。

重複一致のテクニック

を実現するには一致が重複している場合は、いくつかのアプローチが可能です採用:

  • ゼロ幅アサーション:

    • キャプチャ グループで正の先読みを利用して、入力文字列内のすべての位置をテストします.
    • 無限を避けるために RegExp.lastIndex を手動で進めますループ。
    • .NET、Python、PHP、Ruby、および Java (matchAll を使用) でサポートされます。

例 (matchAll を使用した JavaScript) :

const re = /(?=(\d{3}))/g;
console.log(Array.from('12345'.matchAll(re), x => x[1]));
ログイン後にコピー

このコードは、肯定的な先読みを使用してすべてをテストします連続する 3 桁の数字に一致する文字列内の位置。結果は、["123"、"234"、"345"] を含む、一致した部分文字列の配列です。

追加の考慮事項:

  • ゼロ-width アサーションは、重複する部分文字列を一致させる必要がある場合にのみ適用されます。
  • 一部の正規表現エンジンには、重複一致のサポートが組み込まれています (PHP や Ruby の PCRE など)。
  • 代替アプローチには、部分文字列または分割関数を使用したループの使用が含まれる場合があります。

以上が正規表現とグローバル フラグを使用して重複する一致を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート