Вы используете ^
и $
в вашем RegExp.Это приводит к тому, что RegExp соответствует только одной строке: строке, которая полностью соответствует шаблону.
Вместо этого используйте следующее RE при fiddle: http://jsfiddle.net/5kXBk/7/
text = text.replace(/([^$]*)((?\$\d+)*)(.*?)(?=<br|$)/g, "<span class=\"blue\">$1</span><span class=\"red\">$2</span><span class=\"green\">$3</span>");
([^$]*)
Любой не-знак доллара - ((?: \ $ \ D +) *) Любой «Знак доллара с хотя бы одним номером»
(.*?)
Любой символ (?=<br|$)
До конца (<br>
или $
) (contentEditable
преобразует переводы строк в <br>
с)