More regex commands are "greedy" which means that they will take everything up to the last delimeter in the list.
You need to do some negating in your clause to keep it from grabbing everything.
$nnews = eregi_replace("[IMG](.*i<b>[[/IMG]]</b>)[/IMG]", "<img src=\"http://\1\">", $nnews);
This might work, but I haven't tested it. Basically it's saying grab everything after [IMG] except for [\IMG]. It should stop the greedy behaviour. But test it out, it probalby needs some tweaking.