Skip to content

Commit 7c7d6b7

Browse files
jakemccswannodette
authored andcommitted
CLJS-485: RegExp flags are being dropped by string/replace
Changes clojure.string/replace-all to respect previously set RegExp flags when creating new RegExp. test for multiline
1 parent 7f3fd0f commit 7c7d6b7

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

src/main/cljs/clojure/string.cljs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,12 @@
2626

2727
(defn- replace-all
2828
[s re replacement]
29-
(.replace s (js/RegExp. (.-source re) "g") replacement))
29+
(let [r (js/RegExp. (.-source re)
30+
(cond-> "g"
31+
(.-ignoreCase re) (str "i")
32+
(.-multiline re) (str "m")
33+
(.-unicode re) (str "u")))]
34+
(.replace s r replacement)))
3035

3136
(defn- replace-with
3237
[f]

src/test/cljs/clojure/string_test.cljs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
(is (= "FOObarFOO" (s/replace "foobarfoo" #"foo" s/upper-case)))
2626
(is (= "barbar)foo" (s/replace "foo(bar)foo" "foo(" "bar")))
2727
(is (= "FOO-ObarFOO-O"
28-
(s/replace "foobarfoo" #"f(o)o" (fn [[m g1]] (s/upper-case (str m "-" g1)))))))
28+
(s/replace "foobarfoo" #"f(o)o" (fn [[m g1]] (s/upper-case (str m "-" g1))))))
29+
(is (= "faabarfaa" (s/replace "FOObarfoo" #"(?i)foo" "faa")))
30+
(is (= "aaa\nccc" (s/replace "aaa\nbbb" #"(?m)^bbb" "ccc"))))
2931

3032
(testing "Testing string join"
3133
(is (= "" (s/join nil)))

0 commit comments

Comments
 (0)