js 正規表現の先読みと後読み、および非キャプチャグループ化

js 正規表現の先読みと後読み、および非キャプチャグループ化

先読みと後読みをキャプチャグループと組み合わせる

実際のアプリケーション シナリオでは、キャプチャ グループまたは非キャプチャ グループは通常、先読み条件と後読み条件に制限されます。たとえば、数値 12345678 をフォーマットすると、結果は 12,345,678 になります。通常の実装は次のとおりです。

formatSum = '12345678'.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',') とします。

捕獲グループと非捕獲グループ

先読みと後読みを理解するには、まずキャプチャグループと非キャプチャグループを理解する必要がある。

jsでは、

() はキャプチャグループを意味し、() は $n (n は n 番目のキャプチャグループの内容を示す数値) を使用して各グループ内の一致する値を保存します。

(?:) は非キャプチャ グループを表します。キャプチャ グループとの唯一の違いは、非キャプチャ グループに一致する値が保存されないことです。

formatSum 式を例にとると、(?=(?:\d{3})+(?!\d))、(?:\d{3})、(?!\d) はすべてグループであり、2 番目のグループは非キャプチャ グループです。

前を向いて、後ろを振り返り、そして前を向いて後ろをネガティブに振り返る

上記の formatSum 式では、いわゆる先読みと否定先読みである '?=' と '?!' が使用されています。理解しやすくするために、簡単な例から始めましょう。

// 先読み:
A(?=B) //Bより前にAがあるか検索
// ルックバック:
(?<=B)A //Bの後のAを検索
// 否定先読み:
A(?!B) // Bが後に続かないAを探す
// 否定的なルックバック:
(?<!B)A // B が前にない A を検索

formatSum式を振り返ると、(?:\d{3})+(?!\d)は全体式Aとみなされ、つまり、

formatSum = /\B(?=A)/g //ここでAは式であり、実際の文字Aではありません。理解を容易にするためです。

これは、式 A の前の \B に一致することを意味し、\B は文字以外の境界に一致するため、式の全体的な機能は、式 A の前の境界に一致して置き換えることであることがわかります。

\B に対応するのは \b で、文字の境界に一致します。初心者にとって、境界の概念は理解しにくいものです。境界は目に見えない | と考えることができます。長さが 2 以上である文字列には境界が存在します。たとえば、「ab」は「a|b」とみなされますが、| は表示されず、文字列の長さにはカウントされません。

'ab'.replace(/\B/, ',')
// a,b

次に、式の部分 A を見てみましょう: (?:\d{3})+(?!\d) 。

まず、?: は非キャプチャグループを表し、\d{3} は 3 桁を表し、(?:\d{3})+ は 3、6、9、12... 桁を表します。

(?!\d) は否定の先読みであり、数字が続かない (?:\d{3})+ に一致することを意味します。要約すれば:

(?:\d{3})+(?!\d)  

'12345678' 内の数字以外の 3*n (n=1 増分) 桁 (つまり '678'、'345678') に一致します。

結果は次のとおりです。

formatSum = '12345678'.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',')

'12345678' 内の数字ではない 3*n (n=1, n++) 桁の前の非文字境界に一致します。
つまり、「678」と「345678」の前の非文字境界は最終的にコンマに置き換えられます。
つまり、「3」と「6」の前にカンマを追加します

今すぐ

'12345678'.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',') === '12,345,678'
// 真実

要約する

js 正規表現の先読み、後読み、非キャプチャ グループに関するこの記事はこれで終わりです。js 正規表現の先読み、後読み、非キャプチャ グループの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript における正規表現の実際的な応用の詳細な説明
  • jsは正規表現を使用して年、月、日の例をフィルタリングします
  • js 正規表現の簡単な検証方法
  • Jsは正規表現を使用して文字列から括弧を削除します
  • JavaScriptは正規表現を使用して登録とログインの検証を実装します
  • JavaScript 正規表現の説明

<<:  IE6はmin-widthを実装している

>>:  Ubuntu 20.04 に MySql5.7 をインストールして構成するための詳細なチュートリアル

推薦する

MySQL バイナリログデータ復旧: 誤ってデータベースを削除した場合の詳細な説明

MySQL Binログデータの回復: 誤ってデータベースを削除した場合前書き: テスト マシンで誤っ...

Win10にnginxをインストールして設定するプロセス

1. はじめにNginx は、無料のオープンソースの高性能 HTTP サーバーおよびリバース プロキ...

IE8互換表示(IE7モード)とスタンドアロンIE7の違いの詳細な説明

1つ。 IE8 互換表示の概要<br />新しいバージョンのブラウザが古い Web サイ...

Docker を使用した ELK7.3.0 ログ収集サービスの導入に関するベスト プラクティス

最初に書くこの記事では、ELK 7.3.0 の展開についてのみ説明します。展開環境:システムセントO...

HTML チュートリアル: よく使われる HTML タグのコレクション (4)

関連記事:初心者が学ぶ HTML タグ (3)導入された HTML タグは、必ずしも XHTML 仕...

WIN10 に複数のデータベースがインストールされている場合にコンピュータの速度低下を防ぐ方法

必要なときにサービスを有効にし、必要がないときは無効にします。データベース サービスを管理する方法:...

HTML の div と span の違い (共通点と相違点)

共通点: DIV タグと SPAN タグは、コンテンツ全体を非表示にしたり、コンテンツ全体を移動した...

MySQL フラッシュバック ツール binlog2sql の詳細なインストールと設定のチュートリアル

概要binlog2sql は、Python で開発されたオープンソースの MySQL Binlog ...

MySQLで論理SQLを置き換える際の落とし穴を回避する方法の詳細な説明

重複キーの置換と挿入の違い置換の使用法競合がない場合、挿入と同等となり、他の列のデフォルト値が使用さ...

MySQL シャーディング入門ガイド

序文リレーショナル データベースは、システムのボトルネックになる可能性が高くなります。単一のマシンの...

MySQL 5.7.13 のインストールと設定方法のグラフィック チュートリアル (win10 64 ビット)

この記事では、参考までにMySQL 5.7.13 winx64のインストールと設定方法のグラフィック...

MySQL での正規表現の使用に関する詳細

目次1. はじめに2. 製品テーブルを準備する2.1 ステートメントの順序2.2 大文字と小文字の区...

Reactでコンポーネントを作成する方法

目次序文コンポーネントの紹介クラスコンポーネントの作成状態についてレンダリングについて関数コンポーネ...

Linux のハードリンクとソフトリンクの区別

Linux には、2 種類のファイル接続があります。1 つは Windows のショートカットに似て...

uniapp プロジェクトで MQTT を使用する方法

目次1. uniappプラグインマーケットのリファレンスプラグイン2. 具体的な導入プロセス1. m...