Ok, I spotted the problem.
It's because of the \b at the end completely of the pattern. The \b means "word boundary (the zero-width point between a character that forms part of the word \w class and a character that forms part of the non-word \W class)" and as / doesn't form part of the \w class, it's not considered in the match, although the \S+ "until it finds a space" class is used.
Here's a possible solution.
alias urlu {
return $regsubex($1-,/\b(\^@\S+|www\.\S+|http://\S+|irc\.\S+|irc://\S+|\w+(?:[\.-]\w+)?@\w+(?:[\.-]\w+)?\.[a-z]{2,4})(?(?<=/)|\b)/gi,$+(10,\1,))
}
I've used some conditional for a casewise match. But you could as well use the following solution.
alias urlu {
return $regsubex($1-,/\b(\^@\S+|www\.\S+|http://\S+|irc\.\S+|irc://\S+|\w+(?:[\.-]\w+)?@\w+(?:[\.-]\w+)?\.[a-z]{2,4})/gi,$+(10,\1,))
}
By the way, here's yet another solution with a better pattern.
alias urlu {
return $regsubex($1-,/\b(www\.\S+|http://\S+|irc(\.|://)\S+|\w+(?:[\.-]\w+)?@\w+(?:[\.-]\w+)?\.[a-z]{2,4})/gi,$+(10,\1,))
}
Hope this helps you.
Cordialement