이 글은 JS 정규식에 대한 심층적인 이해를 위한 테스트 방법과 그 트랩을 주로 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.
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 정규식 테스트 방법과 그 함정에 대한 심층적인 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!