[javascript] 정규식과 일치하는 문자열인지 확인하기위한 regex.test VS string.match

여러 번 문자열을 사용하고 있습니다 match 함수를 이 정규식과 일치하는지 알고 있습니다.

if(str.match(/{regex}/))

이것 사이에 차이점이 있습니까?

if (/{regex}/.test(str))

그들은 같은 결과를주는 것 같습니까?



답변

기본 사용법

먼저, 각 기능이 무엇을하는지 보자 :

의 RegexObject . 테스트 ( 문자열 )

정규식과 지정된 문자열이 일치하도록 검색을 실행합니다. true 또는 false를 반환 합니다 .

문자열 . 일치 ( RegExp )

문자열을 정규식과 일치시킬 때 일치 항목을 검색하는 데 사용됩니다. 일치하는 배열이 있거나 null없는 배열을 반환합니다 .

이후 null로 평가 false,

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

공연

성능과 관련하여 차이가 있습니까?

. MDN 사이트 에서이 짧은 메모를 찾았습니다 .

문자열이 정규식 regexp와 일치하는지 알아야하는 경우 regexp.test (string)를 사용하십시오.

차이가 중요합니까?

한 번 더 대답은 예입니다 ! 이 jsPerf 는 브라우저에 따라 차이가 ~ 30 % ~ ~ 60 % 임을 보여줍니다 .

테스트 대 경기 |  성능 테스트

결론

.test더 빠른 부울 검사를 원하면 사용 하십시오. 사용 .match사용하는 경우 모든 일치를 검색하기 위해 g글로벌 플래그를.


답변

정규 표현식에서 전역 플래그를 고려하는 것을 잊지 마십시오.

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

이는 Regexp가 새 일치 항목이 발견 될 때 lastIndex를 추적하기 때문입니다.


답변

이것은 내 벤치 마크 결과입니다
벤치 마크 결과

4,267,740 ops / sec ± 1.32 % 테스트 (60 회 샘플링)

exec 3,649,719 ops / sec ± 2.51 % (60 회 샘플링)

3,623,125 ops / sec와 일치 ± 1.85 % (62 회 샘플링)

6,230,325 ops / sec의 ± 0.95 % (62 회 샘플링)

테스트 방법은 match 방법보다 빠르지 만 가장 빠른 방법은 indexOf입니다.


답변