この記事では、JavaScript の正規表現の定義 (文法) について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
正規表現を定義するには 2 つの方法があります。1 つは RegExp() を直接呼び出す方法で、もう 1 つはリテラルを使用して直接定義する方法です (var re = /正規ルール/;
)どちらの定義メソッドも基本的に RegExp() メソッドを呼び出します
同じ通常のコードを呼び出した場合、ECMAScript3 と ECMAScript5 では動作がまったく異なります
function reg(){ var re = /\sjavascript/; return re; }
ECMAScript3 と ECMAScript5 でそれぞれ reg() メソッドを複数回呼び出します
ECMAScript3 では同じ RegExp オブジェクトが呼び出されますが、ECMAScript5 では、EXCMAScript5 で実行されるたびに新しい RegExp オブジェクトが生成されるため、別の RegExp オブジェクトが呼び出されます
ECMAScript3 のプログラムには隠れた危険が存在します。オブジェクトが 1 か所で変更される限り、このオブジェクトを呼び出すすべての場所が変更されるからです。
1. 直接的な文字
は通常、
などの正規表現内の文字に直接一致します。/javascript/
文字 javascript
は、次のような文字以外の文字のマッチングもサポートします。
NUL 文字 (u0000)
t タブ文字 (u0009)
n 改行文字 (u000A)
v 垂直タブ (u000B)
f フォームフィード文字 (u000C)
r キャリッジリターン文字 (u000D)
xnn 16 進数 nn で指定されるラテン文字。たとえば、x0A は次と同等です。
uxxxx 16 進数 xxxx で指定された Unicode 文字。たとえば、u0009 は
と同等です。cX 制御文字 ^X (たとえば、cJ) は改行文字 n
と同等です。正規表現には、''
でエスケープする必要がある特別な意味を持つ句読点がいくつかあります。^$.* ?=!:|/()[]{}
2. 文字クラス
[...] 角括弧内の任意の文字
[^...] 角括弧内にない文字
。任意の文字
w [a-zA-Z0-9]
に相当する、ASCII 文字で構成される任意の単語W ASCII 文字で構成されていない単語。[^a-zA-Z0-9]
に相当します。の Unicode 空白
S Unicode 以外の空白文字。w と S は異なることに注意してください
d [0-9]
に相当する任意の ASCII 値D [^0-9]
に相当する、ASCII 数字を除く任意の文字[b] バックスペース リテラル (特殊なケース)
3. 繰り返し(回数)
0 回または 1 回
1 回以上
* 何度でも
{n} n 回
{m,n} 最小 m 回、最大 n 回
{n,} n 回以上
正規表現のデフォルトは貪欲一致です
[a b ] など、aaabb に一致させたい場合、ab、aab などには一致せず、aaabb のみに一致します
[a ?b ?] これは aaab と一致します。なぜこのような違いがあるのでしょうか?
答え: ? 通常の非貪欲マッチングを作成しましょう。その場合、ここでは b は 1 つの b にのみ一致します。では、なぜ a は 3 に一致するのでしょうか?これは、正規表現のパターン マッチングでは常に文字列内で最初に一致する可能性のある位置を検索するためです。
4. グループ化 |
| は、ab または cd のいずれかに一致するオプションの文字を区切るのに使用されます。注: : 選択された項目の照合の順序は左→右です。 [a|ab]、a が一致すると、ab の方が一致する場合でも、ab は一致しません
() 1. 個々の項目は部分式として扱われます /java(script)?/ javascript と java に一致します。つまり、括弧の部分が部分式を形成し、部分式
2. 完全なパターン内のサブパターンを定義します。後者は括弧で囲まれた式を参照できます。/(['"])[a-z]1/ 1 は最初の括弧内の式を参照するため、Quoted [ '"]3. 後ろにある前の部分式を参照します
注: /['"][a-z]['"]/ この正規表現は、一重引用符または二重引用符に小文字を加えたものを意味します。引用符または二重引用符の前後の単一引用符と二重引用符が一致しない場合は、 [(['"])[a-z]1] のように記述できます。
数字を追加します。前の括弧内の式を引用できます。
5. マッチング位置(アンカーポイント)を指定します
^ 文字列の先頭と一致します。複数行の検索では、行の先頭と一致します。$ 文字列の末尾と一致します。複数行の検索では、行の末尾と一致します。
b 単語の境界に一致します。つまり、文字 w と W の間の位置、または文字 w と文字列の先頭または末尾の間の位置です。
B 非単語境界の位置と一致します
(?=p) ゼロ幅前方先読みアサーションでは、次の文字が p に一致する必要がありますが、p に一致する文字を含めることはできません
(?!p) ゼロ幅の負の先読みアサーションでは、次の文字が p に一致しないことが必要です
6. 修飾子
は正規表現リテラルの右側に記述されます //
大文字と小文字を区別しないマッチングを実行しますg はグローバル一致を実行します。つまり、最初の一致が見つかった後に停止するのではなく、すべての一致が見つかります
m 複数行の一致パターン、^ は行の先頭と文字列の先頭に一致、$ は行の末尾と文字列の末尾に一致 /java$/m は javafunc に一致します
注意: 正規表現がグローバルの場合、exec() および test() が実行されるたびに、現在設定されている lastIndex が現在の位置に設定されるため、lastIndex の位置から実行が開始されます。実行するたびに lastIndex を 0 に設定するのが最善です。
この記事が JavaScript プログラミングのすべての人に役立つことを願っています。