PhoneGap 소스 코드 분석 6 - 정규 표현 식
정규 표현 식 기초
1. 일반 문자: 자모, 숫자, 밑줄, 한자 와 특별한 의미 가 없 는 모든 문자, 예 를 들 어 ABC 123.일치 할 때 같은 문자 와 일치 합 니 다.
2. 특수 문자: (필요 시 역 슬 래 쉬 "\" 를 사용 하여 전의)
문자
속뜻
문자
속뜻
문자
속뜻
문자
속뜻
\a
벨 부
^
일치 하 는 문자열 의 시작 위치
\b
단어의 시작 이나 끝 과 일치 합 니 다.
{n}
n 회 일치
\f
페이지 바 꾸 기
$
일치 하 는 문자열 의 끝 위치
\B
일치 하 는 것 은 단어의 시작 과 끝 이 아 닌 위치 입 니 다.
{n,}
최소 n 회 일치
줄 바 꿈 = \ x0A
()
하위 표현 식 의 시작 과 끝 을 표시 합 니 다.
\d
일치 하 는 숫자
{n,m}
n ~ m 회 일치
\r
Enter 부호 = \ \ x0D
[]
사용자 정의 문자 조합 일치
\D
숫자 가 아 닌 문자 와 일치 합 니 다.
[0-9]
0 에서 9 의 임의의 숫자 와 일치 합 니 다.
\t
탭 문자 = \ x09
{}
일치 하 는 횟수 를 수식 하 는 기호
\s
임의의 공백 문자 일치
[f-m]
f 에서 m 까지 임의의 알파벳 일치
\v
수직 탭 문자 = \ x0B
.
줄 바 꿈 을 제외 한 문자 와 일치 합 니 다.
\S
임의의 공백 문자 일치
\e
ESC 부적 = \ x1B
?
0 또는 1 회 일치
\w
알파벳 이나 숫자 또는 밑줄 또는 한자 일치
\xXX
이 번호 의 문자 와 일치 할 수 있 는 16 진수 형식 을 사용 합 니 다.
+
1 번 혹은 여러 번 일치
\W
알파벳, 숫자, 밑줄, 한자 가 아 닌 문자 와 일치 합 니 다.
\uXXXX
네 자리 16 진법 으로 형식 을 표시 하면 이 번호 의 문자 와 일치 할 수 있 습 니 다.
*
0 또는 여러 번 일치
[^x]
x 를 제외 한 모든 문자 일치
\x{XXXXXX}
임의의 16 진수 표시 형식 을 사용 하면 이 번호 의 문자 와 일치 할 수 있 습 니 다.
|
좌우 양쪽 표현 식 사이 의 "또는" 관계
[^aeiou]
aeiou 를 제외 한 모든 문자 일치
위 에 열거 한 이 특수 문자 들 은 대체적으로 다음 과 같이 나 눌 수 있다.
(1) 쓰기 불편 한 문자: 예 를 들 어 벨 문자 (\ a), 페이지 바 꾸 기 문자 (\ f), 줄 바 꾸 기 문자 (), 리 턴 문자 (\ r), 탭 문자 (\ t), ESC 문자 (\ e)
(2) 16 진수 문자: 예 를 들 어 두 자리 (\ x02), 네 자리 (\ x012B), 임 의 위치 (\ x {A34D 1})
(3) 표시 위치 문자: 예 를 들 어 문자열 시작 (^), 문자열 끝 ($), 단어 시작 과 끝 (\ b), 단어 중간 (\ B)
(4) 표시 횟수 문자: 예 를 들 어 0 또는 1 번 (?), 1 또는 여러 번 (+), 0 또는 여러 번 (*), n 번 ({n}), 최소 n 번 ({n,}), n ~ m 번 ({n, m})
(5) 수식 문자: 예 를 들 어 수식 횟수 ({}), 사용자 정의 조합 일치 ([]), 하위 표현 식 ((())
(6) 반대 문자:
(A) 대소 문자 반 의 를 통 해: 예 를 들 어 \ b 와 \ B, \ d 와 \ D, \ s 와 \ S, \ w 와 \ W
(B) [^] 반 의 를 통 해: 예 를 들 어 [^ x], [^ aeiou]
(C) 기타 특례: 예 를 들 어 화. 도 반 의 를 구성한다.
(7) 범위 문자: 예 를 들 어 숫자 범위 ([0 - 9]), 자모 범위 ([f - m])
(8) 논리 문자: 예 를 들 어 표시 또는 (|)
3. 전의
(1) 역 슬 래 쉬 "\" 전의 단일 문자 사용
(2) "\ \ Q... \ E" 전 의 를 사용 하여 표현 식 중간 에 나타 난 문 자 를 모두 일반 문자 로 합 니 다.
(3) "\ U... \ E" 전 의 를 사용 하여 표현 식 중간 에 나타 난 문 자 를 모두 일반 문자 로 하고 소문 자 를 대문자 로 변환 합 니 다.
(4) "\ L... \ E" 의 미 를 사용 하여 표현 식 중간 에 나타 난 문 자 를 모두 일반 문자 로 하고 대문자 를 소문 자로 변환 합 니 다.
4. 탐욕 모드 와 게 으 름 모드
정규 표현 식 에 횟수 문자 가 포함 되 어 있 을 때 일반적인 상황 에서 가능 한 한 많은 문자 와 일치 합 니 다. 예 를 들 어 l * n 으로 linjisong 과 일치 하면 lin 이 아 닌 linjison 과 일치 합 니 다. 이런 모델 은 정규 표현 식 의 탐욕 모델 입 니 다.이에 대응 하여 문자 '?' 를 추가 하여 게 으 름 모드 로 설정 할 수 있 습 니 다. 즉, 가능 한 한 적은 문자 와 일치 하도록 설정 할 수 있 습 니 다.여 *?반복
5. 그룹 과 역방향 참조
(1) 작은 괄호 ((() 로 표현 식 을 포함 하면 표현 식 을 하나의 전체 로 처리 하여 그룹의 목적 을 달성 할 수 있 습 니 다.
(2) 기본 적 인 상황 에서 각 그룹 은 자동 으로 하나의 그룹 번 호 를 가 져 오고 왼쪽 괄호 의 순서에 따라 1 에서 뒤로 번 호 를 매 긴 다.
(3) 엔진 은 처리 할 때 소괄호 내부 표현 식 이 일치 하 는 내용 을 저장 하여 일치 하 는 과정 이나 일치 가 끝 난 후에 처리 할 수 있 도록 합 니 다. 이 내용 을 참조 할 수 있 습 니 다. 예 를 들 어 \ 1 은 첫 번 째 그룹 이 일치 하 는 텍스트 를 표시 합 니 다.
(4) 그룹 이름 도 사용자 정의 할 수 있 습 니 다. 문법 은 (? exp) 입 니 다. 이 럴 때 반대로 인용 할 때 \ k 를 사용 할 수 있 습 니 다.
(5) 일치 하 는 내용 을 저장 하지 않 아 도 되 고 그룹 번호 도 할당 하지 않 아 도 됩 니 다. 문법 은 (?: exp) 입 니 다.
(6) 작은 괄호 에는 다른 특수 문법 이 있 는데 여기 몇 가 지 를 열거 하고 더 이상 깊이 토론 하지 않 는 다.
분류 하 다.
코드 / 문법
설명 하 다.
포획 하 다.
(exp)
exp 와 일치 하고 자동 으로 이름 이 붙 은 그룹 에 텍스트 를 캡 처 합 니 다.
(?exp)
exp 와 일치 하고 이름 이 name 인 그룹 에 텍스트 를 캡 처 할 수도 있 습 니 다. (? 'name' exp)
(?:exp)
exp 와 일치 합 니 다. 일치 하 는 텍스트 를 캡 처 하지 않 고 이 그룹 에 그룹 번 호 를 할당 하지 않 습 니 다.
너그러이 단언 하 다
(?=exp)
exp 앞 위치 일치
(?<=exp)
exp 뒤의 위치 와 일치 합 니 다.
(?!exp)
뒤에 있 는 것 과 일치 하 는 것 은 exp 의 위치 가 아 닙 니 다.
(?
앞 에 exp 가 아 닌 위치 와 일치 합 니 다.
주석
(?#comment)
이러한 유형의 그룹 은 정규 표현 식 의 처리 에 영향 을 주지 않 고 주석 을 제공 하여 읽 을 수 있 도록 합 니 다.
이 쯤 에서 전편 에 나 온 정규 표현 식 을 이해 하 는 것 만으로 도 충분 합 니 다. 정규 표현 식 을 계속 배우 고 싶다 면 정규 표현 식 30 분 입문 튜 토리 얼 을 참고 하 십시오. 자 바스 크 립 트 의 정규 표현 식 구현 에 대해 다시 한번 알 아 보 겠 습 니 다.
2. Javascript 의 정규 표현 식
1. 정규 표현 식 만 들 기
(1) 글자 사용량: 문법 var exp = / pattern / flags;
A. pattern 은 모든 정규 표현 식 입 니 다.
B. flags 는 세 가지 가 있 습 니 다. g 는 전체 모드 를 표시 하고 i 는 대소 문 자 를 무시 하 며 m 는 여러 줄 모드 를 표시 합 니 다.
(2) RegExp 내장 구조 함수 사용: 문법 var exp = new RegExp (pattern, flags);
A. 구조 함 수 를 사용 할 때 pattern 과 flags 는 모두 문자열 형식 이기 때문에 전의 문자 에 대해 이중 전의 가 필요 합 니 다. 예 를 들 어:
글자 의 양
구조 함수
/\[bc\]at/
"\\[bc\\]at"
/\.at/
"\\.at"
/name\/age/
"name\\/age"
/\d.\d{1,2}/
"\\d.\\d{1,2}"
/\w\\helllo\\123/
"\\w\\\\hello\\\\123"
설명: ECMAScript 3 는 글자 수 를 사용 할 때 RegExp 인 스 턴 스 를 공유 합 니 다. new RegExp (pattern, flags) 를 사용 하면 정규 표현 식 마다 인 스 턴 스 를 만 듭 니 다. ECMAScript 5 는 매번 새로운 인 스 턴 스 를 만 듭 니 다.
2. 인 스 턴 스 속성
(1) global: 불 값 은 g 표 지 를 설 치 했 는 지 여 부 를 나타 낸다.
(2) ignoreCase: 불 값 은 i 플래그 가 설정 되 어 있 는 지 여 부 를 표시 합 니 다.
(3) multiline: 불 값 은 m 표 지 를 설 치 했 는 지 여 부 를 나타 낸다.
(4) lastIndex: 정 수 는 다음 일치 하 는 항목 의 문자 위 치 를 검색 하기 시작 하 는 것 을 나타 내 며 0 부터 계산 합 니 다.
(5) source: 문자열 은 글자 의 양 에 따라 만 든 문자열 모드 를 표시 합 니 다. 인 스 턴 스 가 구조 함 수 를 사용 하여 만 들 더 라 도 글자 의 양 형식의 문자열 모드 를 저장 합 니 다.
3. 실례 방법
(1) exec 방법
A. 하나의 인자, 즉 패턴 의 문자열 을 사용 하여 첫 번 째 일치 하 는 항목 의 정 보 를 되 돌려 주 는 배열 입 니 다. 일치 하지 않 을 때 null 을 되 돌려 줍 니 다.
B. 돌아 오 는 배열 은 Array 인 스 턴 스 이지 만 input 와 index 속성 을 추가 로 보호 합 니 다. 각각 정규 표현 식 을 사용 하 는 문자열 과 일치 하 는 항목 이 문자열 에 있 는 위 치 를 표시 합 니 다.
C. 일치 할 때 되 돌아 오 는 배열 에서 첫 번 째 항목 은 전체 패턴 과 일치 하 는 문자열 이 고 다른 항목 은 패턴 의 그룹 과 일치 하 는 문자열 입 니 다.
D. exec () 에 대해 g 를 설정 하 더 라 도 매번 되 돌아 오 는 것 은 일치 하 는 항목 입 니 다. 다른 것 은 g 을 설정 하고 여러 번 exec 를 호출 하 는 시작 위치 가 다 르 며 g 를 설정 하지 않 고 매번 검색 을 시작 합 니 다.
2. test () 방법
문자열 인 자 를 받 아들 입 니 다. true 로 돌아 가 는 것 과 일치 하지 않 습 니 다. false 로 돌아 가 는 것 과 일치 하지 않 습 니 다.
3. cordova / utils 에서 vformat 방법 분석
위의 기초 가 있 으 면 vformat 의 소스 코드 를 다시 보고 코드 주석 에 상세 하 게 설명 합 니 다.
1 utils.vformat = function(formatString, args) {
2 if (formatString === null || formatString === undefined) return "";// null undefined ,
3 if (arguments.length == 1) return formatString.toString();// args ,
4 if (typeof formatString != "string") return formatString.toString();// ,
5 /*
6 * 1. , , , 。
7 * 2. , , (.*?)、(.) (.*)
8 * 2.1 ,
9 * 2.2 ( ) ( 0 )
10 * 2.3 ( ) ( 0 )
11 */
12 var pattern = /(.*?)%(.)(.*)/;
13 var rest = formatString;
14 var result = [];//
15
16 while (args.length) {// , ,args , args.length 0, ,
17 var arg = args.shift();// , ,
18 /*
19 * , , null
20 * match[0]
21 * match[1] , %
22 * match[2] , %
23 * match[3] , % ,
24 */
25 var match = pattern.exec(rest);
26 if (!match) break;// ,
27 rest = match[3];
28 result.push(match[1]);
29 if (match[2] == '%') {// %% , %, ,
30 result.push('%');
31 args.unshift(arg);//
32 continue;
33 }
34 result.push(formatted(arg, match[2]));// % ,
35 }
36 result.push(rest);//
37 return result.join('');//
38 };
덧 붙 여, 첫 번 째 그룹 은 왜 게 으 름 모드 를 사용 합 니까? 게 으 름 모드 를 사용 하지 않 는 다 고 가정 하면...% j..% o... 첫 번 째 순환 은 뒤의% o 와 일치 합 니 다. g 로고 가 설정 되 어 있 지 않 고 첫 번 째 로 만 나타 나 는 것 이 아니 냐 고 물 을 수도 있 습 니 다. g 설정 이 없 으 면 첫 번 째 로 만 나타 나 는 것 이 맞 습 니 다. 하지만 게 으 름 모드 (. *) 가 아니라면...% j.....................................................................................
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.