Movatterモバイル変換


[0]ホーム

URL:


JS.next

JavaScriptの最新実装情報を追うブログ

この広告は、90日以上更新していないブログに表示しています。

正規表現の名前付きキャプチャが実装された

概要

正規表現内の好きな部分に名前を付け、その名前を使ってマッチ結果を参照できるようになった。


共通

あるパターン「pattern」に名前「name」を付けたい時は(?<name>pattern)と記述する。


例:日付文字列にマッチする正規表現の、「年」「月」「日」の部分にそれぞれ「year」「month」「day」という名前を付ける

// ES2018以降re2018 = /(?<year>\d{4})年(?<month>\d{1,2})月(?<day>\d{1,2})日/u// ES2017以前re2017 =/(\d{4})年(\d{1,2})月(\d{1,2})日/

(※名前付きキャプチャを使うには正規表現ユニコードフラグ/regexp/uを付ける必要がある)


マッチについて

正規表現オブジェクトのmatchexecメソッドを呼ぶと、返り値のオブジェクトのgroupsプロパティにはあるオブジェクトが入る。
そのオブジェクトは全ての名前とそれに紐づくパターンにマッチした文字列からなるプロパティを持つことになる。


例:日付文字列から「月」を取り出す

// ES2018以降'2018年9月1日'.match( re2018 ).groups.month// "9"// ES2017以前'2017年9月1日'.match( re2017 )[ 2]// "9"


置換について

replaceメソッドの第二引数に指定する文字列で$<name>と記述すると、
「name」に紐づくパターンにマッチした文字列がそこに置き換えられる。


例:日本語日付文字列をアメリカ式に置換する

// ES2018以降'2018年9月1日'.replace( re2018,'$<month>/$<day>/$<year>' )// "9/1/2018"// ES2017以前'2017年9月1日'.replace( re2017,'$2/$3/$1' )// "9/1/2017"


後方参照について

正規表現中に\k<name>を使うと、その部分以前に「name」と紐づくパターンにマッチした文字列と、全く同じ文字列にマッチさせることができる。


例:同じ数字が3つ連続で現れる部分にマッチする

// ES2018以降obj2018 ='12345556789'.match( /(?<num>\d)\k<num>{2}/u )obj2018.groups.num// "5"obj2018[ 0]// "555"// ES2017以前obj2017 ='12345556789'.match(/(\d)\1{2}/)obj2017[ 1]// "5"obj2017[ 0]// "555"


実装されるバージョン

V85.3.231

検索
最新V8の全試験機能を有効にするためのフラグ

--harmony --harmony_do_expressions --harmony_class_fields --harmony_static_fields

引用をストックしました

引用するにはまずログインしてください

引用をストックできませんでした。再度お試しください

限定公開記事のため引用できません。

読者です読者をやめる読者になる読者になる

[8]ページ先頭

©2009-2025 Movatter.jp