Back to top

ReQL command: match

Command syntax

string.match(regexp) → null/object


Matches against a regular expression. If there is a match, returns an object with the fields:

  • str: The matched string
  • start: The matched string’s start
  • end: The matched string’s end
  • groups: The capture groups defined with parentheses

If no match is found, returns null.

Accepts RE2 syntax. You can enable case-insensitive matching by prefixing the regular expression with (?i). See the linked RE2 documentation for more flags.

The match command does not support backreferences.

Example: Get all users whose name starts with “A”. Because null evaluates to false in filter, you can just use the result of match for the predicate.

    return doc('name').match("^A")
}).run(conn, callback)

Example: Get all users whose name ends with “n”.

    return doc('name').match("n$")
}).run(conn, callback)

Example: Get all users whose name has “li” in it

    return doc('name').match("li")
}).run(conn, callback)

Example: Get all users whose name is “John” with a case-insensitive search.

    return doc('name').match("(?i)^john$")
}).run(conn, callback)

Example: Get all users whose name is composed of only characters between “a” and “z”.

    return doc('name').match("(?i)^[a-z]+$")
}).run(conn, callback)

Example: Get all users where the zipcode is a string of 5 digits.

    return doc('zipcode').match("\\d{5}")
}).run(conn, callback)

Example: Retrieve the domain of a basic email

r.expr("").match(".*@(.*)").run(conn, callback)


    start: 0,
    end: 20,
    str: "",
    groups: [
            end: 17,
            start: 7,
            str: ""

You can then retrieve only the domain with the () selector and nth.

r.expr("").match(".*@(.*)")("groups").nth(0)("str").run(conn, callback)

Returns ''

Example: Fail to parse out the domain and returns null.

r.expr("name[at]").match(".*@(.*)").run(conn, callback)

Get more help

Couldn't find what you were looking for?