ES6定期的な拡張

まず、新しいフラグプロパティ

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適切より大きい処理するために「ユニコードモード」を意味する、修飾子を\uFFFFUnicode文字。

/^\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_"]

 

おすすめ

転載: www.cnblogs.com/Leophen/p/11184559.html