この広告は、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を付ける必要がある)
正規表現オブジェクトのmatchやexecメソッドを呼ぶと、返り値のオブジェクトの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
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。