]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/regexp/regexp.factor
regexp: adding re-replace-with.
[factor.git] / basis / regexp / regexp.factor
index 6070921d8d4026608322594606509306e6e3d28c..c0d633339066d253431379a430850259a4928fe5 100644 (file)
@@ -113,7 +113,7 @@ PRIVATE>
 
 <PRIVATE
 
-:: (re-split) ( string regexp quot -- new-slices )
+:: (re-split) ( string regexp quot: ( from to seq -- slice ) -- new-slices )
     0 string regexp [| end start end' string |
         end' ! leave it on the stack for the next iteration
         end start string quot call
@@ -138,6 +138,14 @@ PRIVATE>
 : re-replace ( string regexp replacement -- result )
     [ [ subseq ] (re-split) ] dip join ;
 
+:: re-replace-with ( string regexp quot: ( slice -- replacement ) -- result )
+    [
+        0 string regexp [
+            drop [ [ string <slice-unsafe> , ] keep ] dip
+            [ string <slice-unsafe> quot call( x -- x ) , ] keep
+        ] each-match string [ length ] [ <slice-unsafe> ] bi ,
+    ] { } make concat ;
+
 <PRIVATE
 
 : get-ast ( regexp -- ast )