1. 程式人生 > 實用技巧 >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

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?

回答

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:

Conclusion

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