>  기사  >  웹 프론트엔드  >  JS 정규식 테스트 방법과 그 함정에 대한 심층적인 이해

JS 정규식 테스트 방법과 그 함정에 대한 심층적인 이해

不言
不言원래의
2018-07-11 09:55:412272검색

이 글은 JS 정규식에 대한 심층적인 이해를 위한 테스트 방법과 그 트랩을 주로 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

테스트 방법

테스트 소개 method

RegExp.prototype.test(str)

테스트 메서드는 문자열 매개변수에 정규식 패턴과 일치하는 문자열이 있는지 테스트하는 데 사용됩니다.

테스트 메서드 사용법

let reg = /\w/

reg.test('a')       // true

reg.test('$')       // false

테스트 문자열 매개변수에 다음이 포함되어 있으면 결과에서 알 수 있습니다. 정규식 패턴과 일치하는 문자열을 반환하면 true를 반환하고 그렇지 않으면 false를 반환합니다

테스트 메서드의 함정

정규식이 전역 일치를 사용할 때 테스트 메서드에는 다음과 같은 이상한 현상이 나타납니다.

let reg = /\w/g

reg.test('ab')      // true

reg.test('ab')      // true

reg.test('ab')      // false

reg.test('ab')      // true

보시다시피 각 라운드의 세 번째 일치 반환은 true가 되지만 ab모두 reg를 따르지 않습니까? 반환은 true를 반환해야 합니다. 그 이유는 이전 섹션에서 언급한 lastIndex 속성에 있습니다.

테스트 메서드를 실행할 때마다 reg를 인쇄하는 lastIndex 메서드를 시도해 볼 수 있습니다.

let reg = /\w/g
reg.lastIndex       // 0

reg.test('ab')      // true
reg.lastIndex       // 1

reg.test('ab')      // true
reg.lastIndex       // 2

reg.test('ab')      // false
reg.lastIndex       // 0

reg.test('ab')      // true
reg.lastIndex       // 1

결과를 보고 lastIndex의 정의를 떠올려 보면 이유를 이해할 수 있을 것입니다.

lastIndex 속성은 현재 표현식과 일치하는 마지막 문자의 마지막 숫자이며 다음 일치 항목의 시작 위치를 지정하는 데 사용됩니다.

정규식 전역 모드에 들어가면 테스트 메서드를 사용할 때마다 lastIndex부터 시작하여 lastIndex부터 시작하는 하위 문자열을 일치시킵니다. 예를 들어, 예제에서 테스트 메서드가 두 번째로 실행되면 lastIndex가 2로 변경되고 하위 문자열이 비어 있으므로 reg가 이를 일치시킬 수 없습니다. 부분 문자열 일치가 실패하므로 테스트 메서드는 false를 반환하고 lastIndex 특성을 0으로 설정한 다음 루프를 다시 시작합니다.

테스트에서 함정을 피하는 방법

첫 번째 방법: 테스트 방법 자체는 일반 패턴과 일치하는 문자열이 있는지 테스트하는 데 사용됩니다. 전역 모드를 사용하지 않고도 목적을 달성할 수 있으므로 첫 번째 방법은 그렇지 않습니다. 글로벌 모드를 적용합니다.

두 번째 방법: 일반 개체 인스턴스를 변수에 저장하지 않고 매번 일반 개체 인스턴스로 테스트 메서드를 직접 호출합니다. 그러나 이 방법은 메모리를 소비하므로 이론상 권장되지 않습니다.

위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

관련 추천 :

JS 정규식의 REGEXP 객체 속성 분석에 대한 심층적 이해

JS 정규식 그룹화 분석에 대한 심층적 이해

심층적인 이해 욕심 모드와 JS 정규 표현식의 욕심 ​​모드 비 욕심 모드 분석

위 내용은 JS 정규식 테스트 방법과 그 함정에 대한 심층적인 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.