まず、新しいフラグプロパティ
ES6は、正規表現に追加しflags
、それが修飾正規表現を返し、属性。
// ES5ソースプロパティが // 正規表現のボディを返す / ABC / ig.source // 「abc」が
// ES6のフラグは属性 //は正規表現修飾子を返します / ABC / ig.flags // 「GI」を
二、
コンストラクタの変更
ES5では、パラメータのRegExpコンストラクタは、2つのケースがあります。
1、パラメータは文字列ですが、私は修飾子です
VaRの REGEX = 新しい新しい正規表現( 'XYZ'、 'I' ); // 同等のvar正規表現= / XYZ / I;
2、パラメータが正規表現で、私は修飾子です
VaRの REGEX = 新しい新しい正規表現(/ XYZ / I); // 同等のvar正規表現= / XYZ / I;
しかし、ES5は、この状況が修飾子を追加するために、第2のパラメータを使用することはできません。
VaRの正規表現= 新しい正規表現(/ XYZ / 'I' ); // キャッチされない例外TypeError:から別の正規表現を構築する際にフラグを供給することができません
ES6は、この動作を変更します。RegExpオブジェクトのコンストラクタの最初のパラメータは、通常のオブジェクトである場合は、2番目の引数は、修飾子を指定することができます。
また、第2の改質改質パラメータは、元の正規表現をオーバーライド
新しい正規表現(/ ABC / IG、 'I' ).flags // "I"
第三に、新しい修飾子
1、uの修飾子
ES6正規表現が追加u
適切より大きい処理するために「ユニコードモード」を意味する、修飾子を\uFFFF
Unicode文字。
/^\uD83D/.test('\uD83D\uDC2A ')// 真 /^\uD83D/u.test('\uD83D\uDC2A')// 偽
上記のコードは、\uD83D\uDC2A
4バイトのUTF-16コード、文字の代表です。
それはES5 UTF-16エンコードを第二のラインの結果が得られ、2つの文字として認識される4つのバイトをサポートしていませんtrue
。
プラスu
修正後に、ES6が文字として認識するために、結果は、コードの最初の行ですfalse
。
ドット文字について
ポイント(
.
)正規表現で改行文字以外の任意の1文字を表します。しかし、より大きなのコードポイント
0xFFFF
のUnicode文字、ドット文字を認識することができない、それが追加されなければならないu
修飾子を。= '\ ud83d \ udc36てみましょう。 console.log( /^.$/.test(a))。// 偽 にconsole.log(/^.$/ u.test(a)参照)。// 真
2、Y修飾子
ES6は、正規表現に追加y
→(スティッキー)修飾子を「ブロッキング」修飾子。
その役割とg
修飾子似ていますが、全体的な試合は、試合後に最後に成功した試合の次の開始位置からです。
ことを除いて、g
修飾子は限りがあり、一致が休止位置で、かつようすることができy
修飾子は、残りは「ブロッキング」を意味している第一の位置から開始することを保証するために整合されなければなりません。
VAR S = 'aaa_aa' ; VAR R1 = / A + / G。 r1.exec(S)// [ "AAA"] r1.exec(S)// [ "AA"]
以来、上記のコードは、第1ストリング_aaを実行した後に残った、修飾Gを使用しg修饰符
ない立地条件が存在しない第二の実行は、AAを返し、
VAR S = 'aaa_aa' ; VAR R2 = / A + / Y。 r2.exec(S)// [ "AAA"] r2.exec(S)// ヌル
Y改質剤が要件に合致するようにヘッドから開始しなければならないので、上記のコードは、第1ストリング_aaを実行した後に残った、Y改質剤を使用して、それが返されますnull
。
あなたは、各ヘッドが一致させることができることを保証するために、正規表現について変更する場合はy
修飾子は結果を返すことができるようになります:
VAR S = 'aaa_aa_a' ; VAR R3 = / A + _ / Y。 r3.exec(S)// [ "aaa_"] r3.exec(S)// [ "aa_"]