Abbreviating and expanding IP v6 addresses with APL
I think using regular expressions is a perfectly sensible approach. What you're missing is probably that Dyalog APL allows setting a Match Limit with ⍠'ML' n where a positive n limits to the first n matches and a negative n limits to the (absolute value of) nth match. With this in mind, I'd use regular expressions extensively:

AbbreviateIPv6 ← {
    collapsed0s ← '\b0{1,3}' ⎕R '' ⊢ ⍵      ⍝ remove up to 3 leading 0s
    runsOf0s ← '\b(0:)*0\b'                 ⍝ 0:0:0:…:0
    nth ← - ⊃⍒ runsOf0s ⎕S 1 ⊢ collapsed0s  ⍝ 1: lengths, ⊃⍒: index of first max
    abbreviated ← runsOf0s ⎕R ':' ⍠'ML' nth ⊢ collapsed0s
    ':::' '^:$' ⎕R '::' ⊢ abbreviated       ⍝ exactly two
}


Try it online!

Notes:


The linked online IPv6 compressor gives wrong results, as do many others. This one seems to work, even though it misses the occasional shortening opportunity. I still have not found an online tool that compresses both fully and correctly.
If runsOf0s ⎕S 1 doesn't find any runs of 0s, it returns ⍬ so nth becomes 0, which is fine even though 'ML' 0 means "no limit" because there are no matches.