See Option 4 below as the best recommended option.
Option 1: Without using lookaheads and using a non-greedy wildcard match, you can use this regex:
/#r;.*?#r;/
This matches:
a pattern that starts with "#r;"
followed by any number of characters, but the fewest possible
followed by "#r;"
Option 2: Or if you want to get just the text between the delimiters, you can use this and then reference the [1] item returned from the search:
/#r;(.*?)#r;/
"#r;text1#r;#r;text2#r;".match(/#r;(.*?)#r;/)[1] == "text1"
You can see it in action here: http://jsfiddle.net/jfriend00/ZYdP8/
Option3: Or, if there are actually newlines before and after each #r; in the thing you're trying to match, then you would use this regex:
/#r;\n(.*?)\n#r;/
which you can see working here: http://jsfiddle.net/jfriend00/ZYdP8/10/.
Option4: Or, (taking Tom's suggestion) if you don't want any whitespace of any kind to be part of the match on the boundaries, you can use this:
/#r;\s*(.*?)\s*#r;/
which you can see working here: http://jsfiddle.net/jfriend00/ZYdP8/12/.