js의 정규 표현식의 원리

一个新手
풀어 주다: 2017-09-07 09:41:20
원래의
1702명이 탐색했습니다.

정규식을 보다 효율적으로 사용하려면 먼저 정규식 처리의 기본 단계를 이해해야 합니다.

기본 단계

1단계: 컴파일

정규식 개체를 만들 때( 일반 리터럴 또는 RegExp 생성자), 브라우저는 표현식을 검증한 다음 일치 작업을 수행하는 네이티브 코드 프로그램으로 변환합니다. 일반 개체를 변수에 할당하면 중복을 피할 수 있습니다. 이 단계를 실행하세요.

단계 2: 시작 위치 설정

일반 클래스가 사용 상태에 진입하면 먼저 대상 문자열의 검색 시작 위치를 결정합니다. 문자열의 시작 문자이거나 정규 표현식에 의해 lastIndex 속성이 지정됩니다. 하지만 네 번째 단계에서 여기로 돌아올 때(일치 시도 실패로 인해) 이 위치는 마지막 일치의 시작 위치에서 다음 문자 위치에 있습니다.

브라우저 제조업체 최적화 정규식 엔진의 접근 방식은 피하는 것입니다. 불필요한 단계를 미리 건너뛰어 많은 의미 없는 작업을 수행합니다. 예를 들어 정규 표현식이 ^로 시작하는 경우 IE와 Chrome은 일반적으로 일치하는 위치가 일치할 수 있는지 확인합니다. 또 다른 예는 세 번째 문자가 x인 문자열을 일치시키는 것입니다. 현명한 접근 방식은 먼저 x를 찾은 다음 두 문자를 다시 시작하는 것입니다.

3단계: 각 정규식 문자를 일치시킵니다.

정규식은 시작 위치를 알고 나면 텍스트와 정규식 패턴을 하나씩 확인합니다. 특정 문자가 일치하지 않으면 정규식은 이전에 일치시키려고 했던 위치로 되돌아가려고 시도합니다. 다른 가능한 경로

4단계: 일치 성공 또는 실패

문자열의 현재 위치에서 정확히 일치하는 항목이 발견되면 정규식은 일치 성공을 선언합니다. 정규식의 가능한 모든 경로가 일치하지 않으면 정규식 엔진은 두 번째 단계로 돌아가 다음 문자부터 다시 시도합니다. 문자열의 각 문자(및 마지막 문자열 뒤의 위치)가 모두 이 프로세스를 거칠 때 성공적인 일치가 없으면 정규식은 완전 일치 실패를 선언합니다

Backtrack

정규 표현식이 대상 문자열과 일치하면 표현식의 구성 요소를 왼쪽에서 오른쪽으로 하나씩 테스트하고, 수량자와 분기가 발견되면 일치 항목을 찾을 수 있는지 확인합니다. 다음에 수행할 작업을 결정해야 합니다. 수량자(예:

연산자)가 나타나면 일치를 시도할 옵션 중 하나를 선택해야 합니다. *,+?{2, }),  正则表达式需决定何时尝试匹配更多字符; 如果遇到分支(来自|

정규 표현식이 유사한 결정을 내릴 때 필요한 경우 다른 선택이 필요합니다. 현재 옵션이 성공적으로 일치하면 정규식은 계속해서 표현식을 검색하고 다른 부분도 성공적으로 일치하면 일치가 종료됩니다. 그러나 현재 옵션이 성공적으로 일치하면 정규식은 일치하는 값이 없습니다. 옵션이 발견되거나 후속 부분 일치가 실패하면 정규식은 마지막 결정 지점으로 역추적한 다음 나머지 옵션 중 하나를 선택합니다. 이 프로세스는 일치하는 항목이 발견될 때까지 계속됩니다. 또는 모든 순열이 있는 경우 정규식은 계속됩니다. 수식의 수량자 및 분기 옵션 조합이 실패하면 일치를 포기하고 문자열의 다음 문자로 이동한 후 프로세스를 반복합니다.

다음 예는 "고성능" 섹션에서 가져온 것입니다. JavaScript의 반복 및 역추적"은 역추적을 잘 이해하는 데 도움이 됩니다

var str = "<p>Para 1.</p>" + 
          "<img  src=&#39;1.jpg&#39; alt="js의 정규 표현식의 원리" >" + 
          "<p>para 2.</p>" +
          "<p>p.</p>";

/<p>.*<\/p>/i.test(str);//method 1
/<p>.*?<\/p>/i.test(str);//method 2
로그인 후 복사

아래 그림을 참조하세요


js의 정규 표현식의 원리


위 내용은 js의 정규 표현식의 원리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿