You would like to use re-gsub as follows:
(require 'clojure.contrib.str-utils) ;; put in mind so we can use re-gsub later
(clojure.contrib.str-utils / re-gsub # "\ newline" "<br> <br>" your-string-with-todos-separated-with-newlines)
This last line will lead to the desired line. The necessary part, as you already know, allows the compiler to reach the powerful clojure.contrib.str-utils library without importing it into the current namespace (which could potentially lead to unwanted collisions when the program grows).
repeatedly for reg-exp and allows you to define reg-exp of the form # "regexp", which will replace all instances that subsequently fall into regexp with an argument, applied to the third argument. \ Newline in this case clojures is a way of expressing strings in regular expressions, as well as the strings and character we are looking for.
I think what you really wanted to do was make an excellent ordered or unordered list in html format. This can be done using [hiccup-page-helers] [2] (if you do not have them, you probably have a component of the time before it is split into compojure, hiccup, etc., since you use html function).
If you want to use hiccup-page-helpers, use the re-split command from clojure.contrib.str-utils mentioned above, like this:
(use "hiccup.page-helers"); be aware of all namespace conflicts as all functions in hiccup.page-helers are in your current namespace.
(unordered list (clojure.contrib.str-utils / re-split # "\ newline" your lines-with-todos-separated-with-newlines))
which should do neat
<ul>
<& Li GT; ToDo-element 1 </ & Li GT;
<& Li GT; ToDo-element 2 </ & Li GT;
</ ΞΌl>
(and yes, there is an ordered list command that works the same way!)
In the last line of clojure code above, all of your todos fall into (list "todo1" "todo2"), which is immediately consumed by the uncontrolled list function hiccup.page-helers and converted to html.
Good luck with compojure and friends!