Comment made by: slipset
Might not be the answer you want, but Clojurescript uses js' split implementation.
Testing this in the browser you get
> "ab; ab;".split(/(; )|(;$)/)
< ["ab", "; ", undefined, "ab", undefined, ";", ""] (7)
If separator is a regular expression that contains capturing parentheses, then each time separator is matched, the results (including any undefined results) of the capturing parentheses are spliced into the output array. However, not all browsers support this capability.
Which means that to avoid this, you should use non-capturing groups:
(clojure.string/split "ab; ab;" #"(?:; )|(?:;$)")
Which incidentally can be simplified to
(clojure.string/split "ab; ab;" #";(?: |$)")
Which produces the result you're after in both clojure and clojurescript.