単線モードとは何ですか? JavaScript 通常の単一行モードの詳細な説明
この記事では、単一行モードも備えた JavaScript 正規表現を主に紹介します。必要な方は参照してください。
正規表現は、1970 年に Ken Thompson によって改良された QED エディターで最初に実装されました。正規表現は最も単純です。 " は、
上記の文は、1970 年の QED の公式文書からのもので、これは史上初の正規文書である可能性があります。
なぜそのようなルールがあるのでしょうか?これは、QED ではファイルを行単位で編集するため、行末の改行文字もこの行の内容に含まれるためです。たとえば、コード内の単一行コメントをすべて削除したい場合は、QED で次のコマンドを使用できます:
1,$s#//.*##
「.」が改行文字と一致する場合、改行文字も削除されます。その結果、これらの行が生成され、次の行がマージされますが、これは通常、私たちが望むものではないため、「.」が最初に発明されたときは、改行と一致しないように設計されていました。現在のオペレーティング システムにはテストできる QED コマンドはありませんが、VIM はまだ存在しており、同じ理由で VIM 内の「.」は改行文字と一致できません。
通常、ファイルの読み取りにはファイル全体を一度に読み取る必要がある Node とは異なり、Perl は、次のようにファイルを 1 行ずつ読み取る多くの Linux コマンドの伝統を継承しています:
while (<>) {print $_}
_ の最後には改行文字もあります。また、「.」は改行文字と一致しないという QED のルールも当然継承されています。しかし、Perl は結局のところ、プログラミング言語であり、エディタではありません。その正規表現が一致させる必要があるオブジェクトは、単一行のテキストだけではなく、複数行のテキストでもあります。したがって、その正規表現では、「.」という要件があります。したがって、Perl は、「.」も改行と一致できるようにする通常の単一行モード /s を発明しました。
Perl で単一行モードを有効にするために使用される /s 修飾子の正式な説明は、「文字列を単一行として扱う」です。この「単一行」は、「.」とのみ一致します。複数行にまたがるモードではなく、通常モードでは、Perl は複数行の文字列を 1 行として扱い、改行文字をインライン文字として扱うため、「.」はそれらに一致します。もっと分かりやすく言うと、次の 3 行のテキスト
1 2 3
が「1n2n3n」の 1 行のテキストとして扱われます。これが単一行モードの意味です。
しかし、恐ろしいことに、同じ理由で (文字列変数には複数行のテキストを含めることができます)、Perl は複数行モードである /m 修飾子も発明しました。公式の説明では「文字列を複数行として扱う」となっています。このモードの JavaScript の規則は古くから存在します。ここでの「複数行」の意味は、デフォルトでは、文字列の途中にある改行文字の前後の位置と一致しないことです。 、文字列は常に 1 行のみであると見なされ、複数の行が開かれます。パターンは一致します。
つまり、単一行モードと複数行モードは、異なるメタ文字に対応するものであり、正規表現を初めて使用する人は、「単一行モード」と「複数行モード」に混乱するようです。対応しているように見えますが、実際には関係のない名詞によって混同されます。
その後、Ruby の作者は、「単一行モード」という通常の用語が適切に使用されていないと感じたのか、改行文字に一致する「.」のモードを「複数行モード」と呼びました。 * など 正規表現は複数の行に一致するため、修飾子でも /m を使用するのは当然です (Ruby はデフォルトで Perl の「複数行モード」を有効にするため、/m は使用されません)。怪我を侮辱し、さらに混乱を招きます。
その後、Python の作者も「単一行モード」という用語は避けるべきだと感じたので、「dotall」という新しい名前を付けました。これは、ドットがすべての文字に一致するという意味で、非常に良い名前です。以降 Java でもこの名前が使用されます。
上記は歴史を振り返り、シングルラインモードの由来を説明し、シングルラインモードの名前がうまく選ばれなかったことを説明しました。 V8 は最近、ステージ 3 ES プロポーザル github.com/mathiasbynens/es-regexp-dotall-flag を実装しました。このプロポーザルでは、JavaScript の規則性に対して /s 修飾子と dotAll 属性が導入されています。dotAll 属性は、Python と Java から学んだものです。修飾子は Perl から継承されており、/d などの新しい修飾子を作成する必要はありません。これにより、処理がさらに複雑になるだけです。 JavaScript における /s の具体的な効果は、「.」が、以前は一致しなかった 4 つの行終端文字 (n (改行)、r (キャリッジ リターン)、u2028 (行区切り)、u2029 (段落区切り) と一致できるようにすることです。
/foo/s.dotAll // true /^.{4}$/s.test("\n\r\u2028\u2029") // true
実際、これは非常に単純なことですが、JavaScript 以外の正規表現に触れたことのない一部の生徒は、この新しいモードを学ぶときに混乱するかもしれません。もう一度明確にしておきます: 複数行モード。は ^ と $ を制御し、単一行モードは "." のパフォーマンスを制御しますが、この 2 つの間には直接の関係はありません。
これまで一般的に使用されていた単一行モード [^] または [sS] は、完全に役に立たないわけではありません。たとえば、JavaScript 規則性を使用する一部のエディター (VS Code、Atom) では、使用できない可能性があります。単一回線モードを有効にします。ただし、エディターの通常の機能について言えば、JavaScript で実装されたエディターの通常の機能はまだ弱すぎます。たとえば、Sublime の場合、特定のモードを有効にすることができません。 Python の通常のコード)、通常のコード内で (?s) を使用して dotall モードをオンにします。たとえば、(?s)/*.+?*/ を使用すると、すべての複数行のコメントに一致します。
以上が単線モードとは何ですか? JavaScript 通常の単一行モードの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

Golang の正規表現では、パイプ文字 | を使用して複数の単語または文字列を一致させ、各オプションを論理 OR 式として区切ります。例: 「fox」または「dog」に一致します: fox|dog は「quick」、「brown」または「lazy」に一致します: (quick|brown|lazy) 「Go」、「Python」または「Java」に一致します: Go| Python |Java は単語または 4 桁の郵便番号と一致します: ([a-zA

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。
