We should start treating regex like a computer language in its own right, rather than some second-hand citizen that we stuff into a single line without any delimiting whitespace. Use the /x switch and comment your code as you would with any other programming language, and you'll find that regex really isn't that scary.
Take the example pattern. The regex written by a human might look something like so:
m{^
https? :// # Protocol
(?: \w+ \. )? # Subdomain
([\w\-]+) \. # Domain
(?: com | org ) # TLD
/?
$}x
It's certainly easier to parse. Debugging it is also a lot easier. We can see that this won't match anything with more than one subdomain. We can also see that it won't match subdomains that have hyphens in them. It also looks at a glance much more like a URL and less like some arbitrary Ruby code.