First off: I dont study computer science, just interested in formal languages.
I understand that this language is not regular because a finite state machine cannot count the number of a's preceeding the b (it would need a stack) and/or because you cannot express it as a regular expression, but isnt the following a regular grammmar defining the above language?
S -> 0S | 1S | epsilon
Or does this not count because of the epsilon?
No, the context-free grammar that defines your language is
S -> 0S1 | epsilon
You can actually build the tree, for example with the string 000111
S -> 0S1 -> 00S11 -> 000S111 -> 000epsilon111 -> 000111
Be careful with the definitions of grammar and regular expression. The grammar you provided won't work, because it doesn't assure you to have an equal number of 0's and 1's. Test it for yourself, for example, with the string 00011, which isn't part of the language and yet it's recognized by your grammar.