Here's a solution with perl (assuming you don't want to change http/https after the start of ( instead of start of a line):
perl -pe 's/\[[^]]+\]\(\K(?!https?)[^)]+(?=\))/lc $&=~s|%20|-|gr/ge' ip.txt
eflag allows you to use Perl code in the substitution portion.\[[^]]+\]\(\Kmatch square brackets and use\Kto mark the start of matching portion (text before that won't be part of$&)(?!https?)don't match ifhttporhttpsis found[^)]+(?=\))match non)characters and assert that)is present after those characters$&=~s|%20|-|grchange%20to-for the matching portion found, therflag is used to return the modified string instead of change$&itselflcis a function to change text to lowercase
Not my site, just sharing a link I saw on HN.