ES 2018新特徴その:正規表現dotAllモード
3666 ワード
ES 2018新機能非同期反復器 正規表現逆(lookbehind)断言 正規表現Unicodeエスケープ 非エスケープシーケンスのテンプレート文字列 正規表現s/dotAllモード(本明細書) 正規表現名前付きキャプチャグループ オブジェクト展開演算子 Promise.prototype.finally
「正規表現の
1.概要
JavaScript正規表現では、
1.1マルチバイトemoji文字
1.2ライン終端(line terminator characters)
行の終端には次のものがあります. U+000 A LINE FEED(LF)-改行 U+000 D CARRIAGE RETURN(CR)( U+2028 LINE SEPARATOR-行区切り記号 U+2029 PARAPH SEPARATOR-セグメントセパレータ 他にも、行の先頭に立つ文字があります. U+000B VERTICAL TAB ( U+000C FORM FEED ( U+0085 NEXT LINE
現在のJavaScript正規表現の
正規表現では、文字列の先頭と文字列の末尾を表すメタ文字は
または、
2.s/dotAllフラグを追加
最新のECMAScript仕様では、JavaScriptの正規表現にdotAllを表す新しいフラグ
High-level API
3.命名の由来
dotAll機能を実現するためである以上、なぜ Java使用 C#およびVB使用 Pythonは を同時にサポートする.
正規表現にflagを使用する言語、例えばPerl、PHPも
singleline(単行)はmultiline(複数行)に対応する. にのみ影響する. にのみ影響する.
現在JavaScriptの正則表現におけるすべての修飾子の意味: g → global i → ignoreCase m → multiline y → sticky u → unicode s → dotAll
4.実現 V8 - Chrome 62 JavaScriptCore - Safari Technology Preview 39a XS, shipping in Moddable as of the January 17, 2018 update regexpu (transpiler) with the online demo Babel plugin
Compat-transpiler of RegExp Tree Babel plugin
「正規表現の
s
(dotAll)flag」提案proposal-regexp-dotall-flagはMathias Bynensが担当し、現在はstage 4に入り、ES 9(ES 2018)の一部となる.1.概要
JavaScript正規表現では、
.
を使用して任意の文字を一致させます.ただし、2つの例外があります.1.1マルチバイトemoji文字
let regex = /^.$/;
regex.test('?'); // false
u
フラグを設定することで解決できます.u
の意味はunicodeです.let regex = /^.$/u;
regex.test('?'); // true
1.2ライン終端(line terminator characters)
行の終端には次のものがあります.
)-リターン\r
) \v
) 現在のJavaScript正規表現の
\f
は、その一部を一致させることができます.let regex = /./;
regex.test('
'); // false
regex.test('\r'); // false
regex.test('\u{2028}'); // false
regex.test('\u{2029}'); // false
regex.test('\v'); // true
regex.test('\f'); // true
regex.test('\u{0085}'); // true
正規表現では、文字列の先頭と文字列の末尾を表すメタ文字は
.
および^
であるため、$
を用いて一致する./foo.bar/.test('foo
bar'); // false
/foo[^]bar/.test('foo
bar'); // true
または、
^
を使用して空白文字を一致させます./foo.bar/.test('foo
bar'); // false
/foo[\s]bar/.test('foo
bar'); // true
2.s/dotAllフラグを追加
最新のECMAScript仕様では、JavaScriptの正規表現にdotAllを表す新しいフラグ
\s
が追加されました.s
が任意の文字に一致するようにします./foo.bar/s.test('foo
bar'); // true
High-level API
const re = /foo.bar/s; // const re = new RegExp('foo.bar', 's');
re.test('foo
bar'); // true
re.dotAll; // true
re.flags; // "s"
3.命名の由来
dotAll機能を実現するためである以上、なぜ
.
またはd
と命名しないのか.他の言語の正規表現実装では、a
フラグが使用されているからです.s
Pattern.DOTALL
RegexOptions.Singleline
とre.DOTALL
正規表現にflagを使用する言語、例えばPerl、PHPも
re.S
をフラグとして使用する.s
の意味はsinglelineとdotAllです.singleline(単行)はmultiline(複数行)に対応する.
s
フラグは、複数行入力文字列が複数行とみなされるべきであることを指定するために使用される.m
フラグが使用される場合、m
および^
が一致する開始または終了は、文字列全体の開始または終了ではなく、文字列の各行である./^java/.test('just
java
'); // false
/^java/m.test('just
java
'); // true
$
フラグは、m
および^
$
フラグはs
現在JavaScriptの正則表現におけるすべての修飾子の意味:
4.実現
.
option enabled