now it is redirecting to blog folder multiple times
Well, you told it to. You didn't tell it to stop after the first, tenth or fiftieth recursion. Remember, it's just a dumb machine.
Every time you redirect (as opposed to rewrite), the request has to go outside and start over again as if it had never before set foot in your domain. The name
http://www.example.com/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/post-name/
still meets all the conditions in your RewriteRule and RewriteCond, so mod_rewrite will dutifully attach a fresh /blog in front of all the existing ones.
Your Conditions need cleaning-up anyway. There are only two after the (sub)domain-name one. Possibly even one, if your filenames are old-fashioned decently dressed ones with .php at the end.
EITHER
RewriteCond %{REQUEST_URI} !^/(misc|images|blog)
RewriteRule ([^.]+\.php)$ http://www.example.com/blog/$1 [r=301,nc,L]
OR
RewriteCond %{REQUEST_URI} !^/(misc|images|blog)
RewriteCond %{REQUEST_FILENAME} !\.(css|js|ico)$
RewriteRule (.*)$ http://www.example.com/blog/$1 [r=301,nc,L]
You only need an anchor if you're looking for specific beginning text and/or ending text, because Regular Expressions will always start grabbing as soon as they can and go on for as long as they can. So the first Condition needs only an opening anchor, and the second one needs only a closing anchor.