regex.test V.S. string.match to know if a string matches a regular expression

regex.test V.S. string.match to know if a string matches a regular expression

Many times I’m using the string match function to know if a string matches a regular expression.
if(str.match(/{regex}/))

Is there any difference between this:
if (/{regex}/.test(str))

They seem to give the same result?

Solutions/Answers:

Solution 1:

Basic Usage

First, let’s see what each function does:

regexObject.test( String )

Executes the search for a match between a regular expression and a specified string. Returns true or false.

string.match( RegExp )

Used to retrieve the matches when matching a string against a regular expression. Returns an array with the matches or null if there are none.

Since null evaluates to false,

if ( string.match(regex) ) {
  // There was a match.
} else {
  // No match.
} 

Performance

Is there any difference regarding performance?

Yes. I found this short note in the MDN site:

If you need to know if a string matches a regular expression regexp, use regexp.test(string).

Is the difference significant?

The answer once more is YES! This jsPerf I put together shows the difference is ~30% – ~60% depending on the browser:

Related:  Passing in NULL as a parameter in ES6 does not use the default parameter when one is provided

test vs match | Performance Test

Conclusion

Use .test if you want a faster boolean check. Use .match to retrieve all matches when using the g global flag.

Solution 2:

Don’t forget to take into consideration the global flag in your regexp :

var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi');    // => true
reg.test('abcdefghi');    // => false <=

This is because Regexp keeps track of the lastIndex when a new match is found.