The test()
method executes a search for a match between a regular expression and a specified string. Returns true
or false
.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Syntax
regexObj.test(str)
Parameters
str
- The string against which to match the regular expression.
Returns
true
if there is a match between the regular expression and the specified string; otherwise, false
.
Description
Use test()
whenever you want to know whether a pattern is found in a string. test()
returns a boolean, unlike the String.prototype.search()
method, which returns the index (or -1 if not found). To get more information (but with slower execution), use the exec()
method (similar to the String.prototype.match()
method). As with exec()
(or in combination with it), test()
called multiple times on the same global regular expression instance will advance past the previous match.
Examples
Using test()
Simple example that tests if "hello" is contained at the very beginning of a string, returning a boolean result.
var str = 'hello world!'; var result = /^hello/.test(str); console.log(result); // true
The following example logs a message which depends on the success of the test:
function testinput(re, str) { var midstring; if (re.test(str)) { midstring = ' contains '; } else { midstring = ' does not contain '; } console.log(str + midstring + re.source); }
Using test() on a regex with the global flag
If the regex has the global flag set, test()
will advance the lastIndex
of the regex. A subsequent use of test()
will start the search at the substring of str
specified by lastIndex
(exec()
will also advance the lastIndex
property). It is worth noting that the lastIndex
will not reset when testing a different string.
The following example demonstrates this behaviour:
var regex = /foo/g; // regex.lastIndex is at 0 regex.test('foo'); // true // regex.lastIndex is now at 3 regex.test('foo'); // false // regex.lastIndex is at 0 regex.test('barfoo') // true // regex.lastIndex is at 6 regex.test('foobar') //false
Using the same mechanism the following example counts the total number of words in a string:
function countWords (sText) { for (var rWord = /\w+/g, nCount = 0; rWord.test(sText); nCount++); return nCount; } console.log(countWords("What a beautiful day!")); // 4
Specifications
Specification | Status | Comment |
---|---|---|
ECMAScript 3rd Edition (ECMA-262) | Standard | Initial definition. Implemented in JavaScript 1.2. |
ECMAScript 5.1 (ECMA-262) The definition of 'RegExp.test' in that specification. |
Standard | |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'RegExp.test' in that specification. |
Standard | |
ECMAScript Latest Draft (ECMA-262) The definition of 'RegExp.test' in that specification. |
Draft |
Browser compatibility
Desktop | Mobile | Server | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
test | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 4 | Opera Full support Yes | Safari Full support Yes | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support Yes | Safari iOS Full support Yes | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
Legend
- Full support
- Full support
Firefox-specific notes
Prior to Firefox 8, test()
was implemented incorrectly; when it was called with no parameters, it would match against the value of the previous input (RegExp.input
property) instead of against the string "undefined"
. This is fixed; now /undefined/.test()
correctly results in true
, instead of an error.
See also
- Regular Expressions chapter in the JavaScript Guide
RegExp