       "John"
 
   Or simply used pattern matching:
-  
+
       iex> take_prefix = fn full, prefix ->
       ...>   base = byte_size(prefix)
       ...>   <<_ :: binary-size(base), rest :: binary>> = full

  extract a substring from a string, we can use `byte_size/1`
  and `binary_part/3` as there is no chance we will slice in
  the middle of a codepoint made of more than one byte:
  
      iex> take_prefix = fn full, prefix ->
      ...>   base = byte_size(prefix)
      ...>   binary_part(full, base, byte_size(full) - base)

      "a[,,]b[,,]c"

  """
  @spec replace(t, t | Regex.t, t) :: t
  @spec replace(t, t | Regex.t, t, Keyword.t) :: t

  def replace(subject, pattern, replacement, options \\ []) when is_binary(replacement) do
    if Regex.regex?(pattern) do
