Using regular expressions in JavaScript

Regular expressions in Javascript are represented by a RegExp object. There also is a regex literal as in many other languages: /regex/. However, they are used slightly differently.

Regex literal

  • Usage: /foo+/
  • Shorthand for creating a regular expression object

RegExp() object

  • Usage: Regexp("foo+") or new RegExp("foo+")
  • No surrounding slashes required (they're the literal markers)
  • Since the argument is a string, backslashes need to be escaped as well: RegExp("\\d+")

Gotchas

  • Regex objects never equal each other

  • The argument to /regex/.test(...) is converted to a string as defined by the specs, which means e.g. .test(null) is equal to .test("null").

  • Globally matching regex objects remember the last index they matched. Multiple calls to test() will advance this pointer:

    > matcher = new RegExp("foo", "g") // <- "global" flag
    > matcher.test("foobar") // => true
    > matcher.lastIndex // => 3
    > matcher.test("foobar") // => false
    > matcher.lastIndex // => 0
    

    This does not happen when creating a new regex object each run, as with /foo/g.test("foobar"). Note that when using the test() method, the g flag does not help at all. Use match() if you want an array of matches.

Links

Dominik Sch├Âler over 5 years ago
This website uses short-lived cookies to improve usability.
Accept or learn more