Selecting RegExp values
Regular expressions can appear both as literals and as instances of the RegExp
constructor. In the latter case, the pattern is actually a string literal, which makes it a little awkward if you're scanning for a particular pattern and don't care which form it was defined in.
(regex+ [pattern])
selects a regular expression pattern for you in either form (sans flags!) and is shorthand for:
clojure
(:or (regex \1)
(of RegExp
(arg 1 (str+ \1))))
Which, assuming we search for (regex+ foo)
, would match both of the following:
javascript
/foo/
new RegExp('foo')
And any variations of the literal passed to RegExp
that (str+)
could match. You can also use a pattern for a pattern!
clojure
(regex+ /foo/)
Which would match /aaafoobbb/
as well as new RegExp("aaafoobbb")
.