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+")ornew 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 Show archive.org snapshot
- The argument to
/regex/.test(...)is converted to a string as defined by the specs Show archive.org snapshot , which means e.g..test(null)is equal to.test("null"). -
Globally matching regex objects
remember the last index they matched
Show archive.org snapshot
. Multiple calls to
test()will advance this pointer:
matcher = new RegExp("foo", "g") // <- "global" flag
matcher.test("foobar") // => true
matcher.lastIndex // => 3 (where the regexp stopped scanning)
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"). Use String#match() if you want an array of matches.
Posted by Dominik Schöler to makandra dev (2015-12-07 07:31)