diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,11 @@
 Changes
 =======
 
+0.3.3
+-----
+
+Add `replace`
+
 0.3.2.1
 -------
 
diff --git a/Text/Regex/Applicative.hs b/Text/Regex/Applicative.hs
--- a/Text/Regex/Applicative.hs
+++ b/Text/Regex/Applicative.hs
@@ -25,6 +25,7 @@
     , withMatched
     , match
     , (=~)
+    , replace
     , findFirstPrefix
     , findLongestPrefix
     , findShortestPrefix
diff --git a/Text/Regex/Applicative/Interface.hs b/Text/Regex/Applicative/Interface.hs
--- a/Text/Regex/Applicative/Interface.hs
+++ b/Text/Regex/Applicative/Interface.hs
@@ -328,3 +328,13 @@
 -- the prefix and suffix of the string surrounding the match.
 findShortestInfix :: RE s a -> [s] -> Maybe ([s], a, [s])
 findShortestInfix = findExtremalInfix $ flip preferOver
+
+-- | Replace matches of the regular expression with its value.
+--
+-- >Text.Regex.Applicative > replace ("!" <$ sym 'f' <* some (sym 'o')) "quuxfoofooooofoobarfobar"
+-- >"quux!!!bar!bar"
+replace :: RE s [s] -> [s] -> [s]
+replace r = ($ []) . go
+  where go ys = case findLongestInfix r ys of
+                    Nothing                -> (ys ++)
+                    Just (before, m, rest) -> (before ++) . (m ++) . go rest
diff --git a/regex-applicative.cabal b/regex-applicative.cabal
--- a/regex-applicative.cabal
+++ b/regex-applicative.cabal
@@ -1,5 +1,5 @@
 Name:                regex-applicative
-Version:             0.3.2.1
+Version:             0.3.3
 Synopsis:            Regex-based parsing with applicative interface
 Description:         
     regex-applicative is a Haskell library for parsing using regular expressions.
diff --git a/tests/test.hs b/tests/test.hs
--- a/tests/test.hs
+++ b/tests/test.hs
@@ -174,6 +174,20 @@
                 (findShortestInfix "bc" "tabc")
                 (Just ("ta", "bc",""))
             ]
+        , testGroup "replace"
+            [ u "t1"
+                (replace ("x" <$ "a" <|> "y" <$ "ab") "tabc")
+                "tyc"
+            , u "t2"
+                (replace ("y" <$ "ab" <|> "x" <$ "a") "tabc")
+                "tyc"
+            , u "t3"
+                (replace ("x" <$ "bc") "tabc")
+                "tax"
+            , u "t4"
+                (replace ("y" <$ "a" <|> "x" <$ "ab") "tacabc")
+                "tycxc"
+            ]
         ]
     , stateQueueTests
     ]
