「当たるはずなのに当たらない」を調べる道具です。
照合が何文字目で止まったか、そこで何を待っていて、実際には何があったかを名指しします。
さらにフラグや入力を1か所だけ変えて実際に試し、
「これを直せばマッチします」という一手を出します。
全角文字・ゼロ幅文字・改行コード(\r)の混入も見ます。
当たってほしい文字列(改行も入れられます)
上が試した文字列、下が正規表現です。 緑が通ったところ、赤が止まったところ。正規表現の側の赤は、そこで待っていた部分です。
正規表現を前から少しずつ伸ばして、ブラウザの RegExp に当てています。
✓ から ✗ に変わるところが、式が入力を追い越した地点です。
上の「どこまで進んだか」とは別の調べ方なので、両方が同じ場所を指していれば確かです。
フラグか入力を1か所だけ変えて、その場で当て直した結果です。 「変えたらマッチした」ものだけを出しています(推測ではなく実測です)。
見た目では気づきにくい文字です。全角の英数字・記号、ノーブレークスペース、
ゼロ幅文字、BOM、\r、異体字セレクタを拾います。
止まった位置を出すために、この道具は自前の照合器を動かしています。
その結果(マッチするか・どこからどこまで・各グループの中身)を、
ブラウザの RegExp の結果とその場で突き合わせています。
食い違えばここに ✗ が出ます。診断のほうを信じる前に、まずここを見てください。
| の枝が何本も試されて、全部落ちた場合です。そのときは待っていた候補を並べます。RegExp で当て直しています。当たったものだけを出します。(a+)+$ のような式は、外れた瞬間に
組み合わせが爆発します。上限に達したら打ち切って、その旨と回数を出します
(=打ち切られること自体が診断結果です)。\p{...} と v フラグの集合演算は
自前の照合器では扱いません。その場合は「止まった位置」を出さず、
ブラウザの結果だけで診断します(自己検査に「対象外」と出ます)。(?<=…) は、
仕様どおり逆向きに照合しています。はじめは「その位置で終わる開始点を左から探す」
近似で書いていたのですが、7,697 件をブラウザと突き合わせたら
3 件だけグループの中身がずれ、原因が全部これでした。近似をやめて書き直してあります。