06/10/27 15:33:23 cpcnkQie0
昨日、寝る前にベッドの中で思いついたアイデアを今思い出したので、書き残しておきます。
hrefの中で../を発見することが相対リンク→絶対リンクの発動条件ですが、これを肯定先読みを使うことで
よりスマートに、より複雑に、より分かりづらいフィルタに(w)することができます。
href=$AV((^(^../))
この段階でフィルタの発動条件を満たします。
この直後に現在いる階層の深さを測ります。(>902をそのまま利用)
($TST(SWITCH=1)$SET(\0=URL)|
$URL([^:]+://[^/]+/$LST(increment)([^./]+/$LST(increment))+)$SET(URL=\0)$SET(SWITCH=1))
そしてhref内の../を数え上げて、decrementによって引き算します。
(../$LST(decrement))+(*)\3
最後に>900をそのまま利用します。
以上より
Match = "$NEST(<a\s,\1href=$AV((^(^../))($TST(SWITCH=1)$SET(\0=URL)|"
"$URL([^:]+://[^/]+/$LST(increment)([^./]+/$LST(increment))+)$SET(URL=\0)$SET(SWITCH=1))(../$LST(decrement))+(*)\3)(*)\4,>)"
"$URL(([^:]+://[^/]+/$LST(decrement)$TST(\0=[^0])([^./]+/$LST(decrement)$TST(\0=[^0]))+)\5)"
Replace = "<a \1href="\5\3"\4>"
href=$AV()の中に詰め込んだだけで、それ以外は何も変わりません。