後方参照とネストレベル
ある人から、以下の例を示された。
/^(?<o>|.|(?:(?<i>.)\g<o>\k<i>))$/.match('rr') /^(?<o>|.|(?:(?<i>.)\g<o>\k<i>))$/.match('rer')
はマッチするのに、以下はマッチしない。
/^(?<o>|.|(?:(?<i>.)\g<o>\k<i>))$/.match('reer')
これは、iにcaptureされるのは最初は'r'だが、再帰呼び出しされた後で二番目にcaptureされるのは'e'になり、再帰呼び出しから戻ってきた後でも、iで参照されるのは'e'のままになるためである。
これは仕様であって、このままで良いと思うが、上記の例でもマッチできるような新しい機能が必要かもしれない。
\k
表記は
\k<name+n> \k<name-n>
でどうだろうか?