Re
Provide bindings to JS regular expressions (RegExp).
type t
The RegExp object.
type result
The result of a executing a RegExp on a string.
let captures: result => array(Js.nullable(string));
An array
of the match and captures, the first is the full match and the remaining are the substring captures.
let matches: result => array(string);
Deprecated. Use captures instead.
An array
of the matches, the first is the full match and the remaining are the substring matches.
let index: result => int;
0-based index of the match in the input string.
let input: result => string;
The original input string.
let fromString: string => t;
Constructs a RegExp object (Js.Re.t) from a string
.
Regex literals ([%re "/.../"]) should generally be preferred, but fromString is very useful when you need to insert a string into a regex.
RE/* A function that extracts the content of the first element with the given tag */
let contentOf = (tag, xmlString) =>
Js.Re.fromString("<" ++ tag ++ ">(.*?)<\\/" ++ tag ++ ">")
-> Js.Re.exec_(xmlString)
-> (
fun
| Some(result) => Js.Nullable.toOption(Js.Re.captures(result)[1])
| None => None
);
let fromStringWithFlags: (string, ~flags: string) => t;
Constructs a RegExp object (Js.Re.t
) from a string with the given flags.
See Js.Re.fromString
.
Valid flags:
g global i ignore case m multiline u unicode (es2015) y sticky (es2015)
let flags: t => string;
Returns the enabled flags as a string.
let global: t => bool;
Returns a bool
indicating whether the global flag is set.
let ignoreCase: t => bool;
Returns a bool
indicating whether the ignoreCase flag is set.
let lastIndex: t => int;
Returns the index where the next match will start its search. This property will be modified when the RegExp object is used, if the global ("g") flag is set.
RElet re = [%re "/ab*/g"];
let str = "abbcdefabh";
let break = ref(false);
while (! break^) {
switch (Js.Re.exec_(re, str)) {
| Some(result) =>
Js.Nullable.iter(
Js.Re.captures(result)[0],
[@bs] match => {
let next = string_of_int(Js.Re.lastIndex(re));
Js.log("Found " ++ match ++ ". Next match starts at " ++ next);
},
)
| None => break := true
};
};
let setLastIndex: (t, int) => unit;
Sets the index at which the next match will start its search from.
let multiline: t => bool;
Returns a bool
indicating whether the multiline flag is set.
let source: t => string;
Returns the pattern as a string
.
let sticky: t => bool;
Returns a bool
indicating whether the sticky flag is set.
let unicode: t => bool;
Returns a bool
indicating whether the unicode flag is set.
let exec_: (t, string) => option(result);
Executes a search on a given string using the given RegExp object.
Returns Some(Js.Re.result)
if a match is found, None
otherwise.
RE/* Match "quick brown" followed by "jumps", ignoring characters in between
* Remember "brown" and "jumps"
* Ignore case
*/
let re = [%re "/quick\s(brown).+?(jumps)/ig"];
let result = (Js.Re.exec_(re, "The Quick Brown Fox Jumps Over The Lazy Dog"));
let exec: (string, t) => option(result);
Deprecated. please use Js.Re.exec_
instead.
let test_: (t, string) => bool;
Tests whether the given RegExp object will match a given string
.
Returns true if a match is found, false otherwise.
RE/* A simple implementation of Js.String.startsWith */
let str = "hello world!";
let startsWith = (target, substring) =>
Js.Re.fromString("^" ++ substring)->(Js.Re.test_(target));
Js.log(str->(startsWith("hello"))); /* prints "true" */
let test: (string, t) => bool;
Deprecated. please use Js.Re.test_
instead.