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)