정규 표현 식 지식 점 해석 및 판독 유효 숫자, 핸드폰 번호 메 일 박스 정규 표현 식
일치: 현재 문자열 이 우리 의 규칙 에 부합 되 는 지 검증 합 니 다. (모든 정규 규칙 은 하나의 규칙 입 니 다) 캡 처: 전체 문자열 에서 규칙 에 맞 는 문 자 를 순서대로 가 져 옵 니 다. - > exec, match, replace
2. 정규 구성: 메타 문자, 수정자
문자:
특별한 의미 의 메타 문자:
\ \ d 는 0 - 9 의 숫자 와 [0 - 9] 에 해당 하 며, 그 와 반대 되 는 \ \ D 는 0 - 9 를 제외 한 임의의 문자 와 일치 합 니 다 [] \w 매 칭 0 - 9, a - z, A - Z의 숫자 나 문 자 는 [0 - 9a - zA - Z] 에 해당 합 니 다. 、 \s 공백 문자 (빈 칸, 탭 문자. x 또는 y 의 [xyz] x, y, z, 중 임의의 [^ xyz] x, y, z 를 제외 한 임의의 [a - z] - > a - z 의 임의의 문자 [^ a - z] - > a - z 의 임의의 문자 () 정규 중의 그룹 을 제외 하고 일치 합 니 다.
양사:
* 0 개 이상 + 1 부터 몇 개? 0 에서 1 개
?정규 에서 의 의미 가 비교적 많다
비 양사 문자 뒤에 놓 으 면 0 - 1 회 나타 납 니 다. 예 를 들 어 / ^ \ d? $/0 - 9 가 나 오 면 바로 0 에서 1 번.
양사 원 문자 뒤에 놓 고 포획 시의 탐욕 성 을 취소 합 니 다. /^\d+?$/캡 처 할 때 첫 번 째 캡 처 한 숫자 만 '2015' - > 2 (?:) 그룹 값 일치 캡 처 하지 않 음 (? =) 정방 향 예 찰 (?!) 마이너스 예비 조사
() 의 역할 1) 기본 우선 순위 변경 2) 그룹 캡 처 3) 그룹 참조 가능
{n} n 회 {n,} n 회 {n, m} n 회 ~ m 회 출현
일반 문자
모든 문 자 는 정규 에서 이상 의 특수 한 의 미 를 제외 하고 모두 자신의 의 미 를 대표 하 는 일반 메타 문자 이다.
장식 부호:
i: 알파벳 대소 문자 m: multiline 다 중 줄 일치 g: global 전역 일치 무시
항목 에 자주 사용 되 는 정규
1) 유효 숫자의 정규 판단
유효 숫자 는 양수, 음수, 0, 소수 를 가리킨다
첫 번 째 부분: 가감 이 있 거나 두 번 째 부분 이 없 을 수 있 습 니 다. 한 자릿수 는 0 일 수 있 습 니 다. 여러 자릿수 는 0 으로 시작 할 수 없습니다. 세 번 째 부분: 소수 가 있 을 수도 있 고 소수 가 없 을 수도 있 습 니 다. 하지만 소수점 이 나타 나 면 뒤에 적어도 한 자리 의 숫자 var reg = / ^ [+ -]?(\d|[1-9]\d+)(\.\d+)?$/;
유효한 정수 (0 포함): / ^ [+]?(\d|[1-9]\d+)$/;
유효한 음정 수 (0 포함): / ^ - (\ d | [1 - 9] \ \ d +) $/;
핸드폰 번호 판단 (심 플 버 전): var reg=/^1\d{10}$/;
판단 메 일 박스 첫 번 째 부분: 숫자, 자모, 밑줄, - 하나 부터 여러 자리 까지 두 번 째 부분: @ 세 번 째 부분: 숫자, 자모, 하나 부터 여러 자리 까지 네 번 째 부분: (. 두 번 째 부터 네 번 째 부분). com .cn .net .. .com.cn var reg =/^[0-9a-zA-Z_-]+@[0-9a-zA-Z-]+(\.[a-zA-Z]{2,4}){1,2}$/
나 이 를 18 에서 65 사이 로 판단 하 는 18 - 19 / 20 - 59 / 60 - 65 var reg =/^((18|19)|([2-5]\d)|(6[0-5]))$/
진실 하고 효과 적 인 중화 인민공화국 이름 2 - 4 위 한자 var reg = / ^ [\ u4e 00 - \ u9fa 5] {2, 4} $/;
주민등록번호 상위 6 위 는 성 - > 시 - > 현 (구) 4 위 년 2 위 월 2 일
단판
var reg = /^\d{17}(\d|X)$/; 130828199012040617
복잡 판
var reg = /^(\d{2})(\d{4})(\d{4})(\d{2})(\d{2})(?:\d{2})(\d)(?:\d|X)$/;
세부 지식 점
안에 나타 난 모든 문 자 는 그 자체 의 의 미 를 대표 하 는 것 이다. 예 를 들 어 [..] 중의 '이다.' 는 하나의 소수점 을 대표 하 는 것 이지 제외 한 임 의 문자 에 18 이 나타 나 는 것 이 아니 라 1 또는 8 이다. 예 를 들 어 [18 - 65] 는 1 또는 8 - 6 또는 5 중에서 하 나 를 선택 하 는 것 이다.
1. exec 정규 캡 처 방법 - > 먼저 일치 한 다음 에 일치 하 는 내용 을 캡 처 합 니 다.
만약 문자열 이 이 정규 와 일치 하지 않 는 다 면, 포 획 된 반환 결 과 는 null 입 니 다
정규 와 일치 하면 되 돌아 오 는 결 과 는 배열 입 니 다.
예 var str = "2015 zhufeng 2016 peixun" var reg = / \ \ d + /;
첫 번 째 는 저희 가 캡 처 한 내용 입 니 다.
index: 원본 문자열 에서 시 작 된 색인 위치 input: 캡 처 된 원본 문자열
2. 정규 포획 은 게 으 름
정규 캡 처 는 lastIndex 값 에서 시작 합 니 다. 첫 번 째 캡 처 는 lastIndex = 0 입 니 다. 원본 문자열 색인 이 0 인 위치 에서 캡 처 를 찾 습 니 다. 기본 적 인 상황 에서 첫 번 째 캡 처 가 완료 되 었 습 니 다. lastIndex 의 값 은 변 하지 않 았 습 니 다. 0 이기 때문에 두 번 째 캡 처 는 원본 문자열 색인 이 0 인 곳 에서 찾 습 니 다. 이렇게 찾 은 것 은 첫 번 째 캡 처 입 니 다.차 포획 내용 해결 방법: 전역 수정자 g - > g 를 추가 한 후 첫 번 째 캡 처 완료 후 lastIndex 의 값 이 바 뀌 었 습 니 다. 첫 번 째 캡 처 내용 후의 첫 번 째 문자 의 시작 색인 으로 바 뀌 었 습 니 다. 두 번 째 캡 처 는 계속 뒤로 찾 습 니 다. 의문: 전역 수정자 g 를 사용 하지 않 고 캡 처 완료 후 lastIndex 의 값 을 수 동 으로 수정 하면 안 됩 니까? 안 됩 니 다. lastIndex 를 수 동 으로 수정 하 였 지만 lastIndex 의 값 을 변경 하 였 습 니 다. 정규 검색 시 색인 0 에서 시작 합 니 다.
var str = "zhufeng2015peixun2016";
var reg = /\d+/g;
예시
전역 수정자 g 를 추가 하지 않 아 발생 하 는 순환 을 방지 하기 위해 서, 우 리 는 처리 하기 전에 g 를 추가 하지 않 은 수 동 에 g 를 추가 합 니 다.
RegExp.prototype.myExecAll = function myExecAll() {
var _this = this, str = arguments[0], ary = [], res = null;
!_this.global ? _this = eval(_this.toString() + "g") : null;
res = _this.exec(str);
while (res) {
ary[ary.length] = res[0];
res = _this.exec(str);
}
return ary;
};
var ary = reg.myExecAll(str);
console.log(ary);
console.log(reg.lastIndex);//->0
var res = reg.exec(str);
console.log(res);
console.log(reg.lastIndex);//->11
res = reg.exec(str);
console.log(res);
console.log(reg.lastIndex);//->21
res = reg.exec(str);
console.log(res);//->null
3. match: 캡 처 문자열 에 match 라 는 방법 이 존재 합 니 다. 또한 정규 게 으 름 을 취소 하고 match 방법 을 한 번 실행 하면 모든 내용 을 캡 처 할 수 있 습 니 다.
var str = "zhufeng2015peixun2016";
var reg = /\d+/g;
console.log(str.match(reg));
의문: 그럼 우리 모두 match 로 exec 를 교체 하면 얼마나 좋 을 까?
4. 정규 그룹 캡 처
매번 캡 처 할 때마다 큰 정규 와 일치 하 는 내용 을 캡 처 할 수 있 을 뿐만 아니 라 작은 그룹 (하위 정규) 과 일치 하 는 내용 을 따로 캡 처 할 수 있 습 니 다.
var str = "zhufeng[2015]peixun[2016]";
var reg = /\[(\d)(\d+)\]/g;
var res = reg.exec(str);
console.log(res);
["[2015]", "2", "015", index: 7, input: "zhufeng[2015]peixun[2016]"]
첫 번 째 는 대 정규 포획 의 내용 res [0] 두 번 째 는 첫 번 째 조별 포획 의 내용 res [1] 세 번 째 는 두 번 째 조별 포획 의 내용 rex [2]...
그룹 만 일치 하고 캡 처 하지 않 습 니 다. 그룹 내용 을 일치 시 키 지만 캡 처 하지 않 으 면 그룹 앞 에?: 만 추가 하면 됩 니 다.
var str = "zhufeng[2015]peixun[2016]";
var reg = /\[(?:\d)(\d+)\]/g;
var res = reg.exec(str);
console.log(res);
["[2015]", "015"...]
배열 의 첫 번 째 항목 은 대 정규 캡 처 내용 res [0] 입 니 다. 배열 의 두 번 째 항목 은 두 번 째 그룹 에서 캡 처 한 내용 res [1] 입 니 다. 첫 번 째 그룹 이 추가 되 었 습 니까?:, 그래서 포획 하지 않 는 것 과 일치 합 니 다
5. exec 와 match 의 차이
match 는 정규 와 일치 하 는 내용 만 캡 처 할 수 있 습 니 다. 그룹 캡 처 에 있어 서 그룹 과 일치 하 는 내용 을 가 져 올 수 없습니다. 따라서 캡 처 할 때 그룹의 내용 을 캡 처 하지 않 아 도 됩 니 다. 저 희 는 match 를 직접 사용 하 는 것 이 편리 합 니 다. 그룹의 내용 을 캡 처 하려 면 exec 로 하나씩 캡 처 할 수 밖 에 없습니다.
var str = "zhufeng[2015]peixun[2016]";
var reg = /\[(\d+)\]/g;
//console.log(str.match(reg));//->["[2015]", "[2016]"]
var ary = [];
var res = reg.exec(str);
while (res) {
//ary.push(res[1]);
ary.push(RegExp.$1);//RegExp.$1 ,( IE )
res = reg.exec(str);
}
console.log(ary);
6. 정규 탐욕 성: 매번 포획 할 때마다 정규 에 맞 는 최 장 결과 에 따라 포획
var str = "zhufeng2015peixun2016";
var reg = /\d+/g;
console.log(reg.myExecAll(str));//-->["2015","2016"]
var str = "zhufeng2015peixun2016";
var reg = /\d+?/g;
console.log(reg.myExecAll(str));//-->["2", "0", "1", "5", "2", "0", "1", "6"]
7. 그룹 참조
대표
\ \ 1 은 첫 번 째 그룹 과 똑 같은 내용 을 나타 낸다
var reg=/^(\w)(\w)\2\1$/;
"woow"、"1221"...
8. 문자열 방법 - > replace: 한 문자열 의 한 문 자 를 새로운 내용 으로 바 꿉 니 다.
1) 정칙 을 사용 하지 않 은 경우
한 번 replace 를 실행 하려 면 문자열 중 하나 만 바 꿀 수 있 습 니 다. 여러 개 를 바 꾸 려 면 똑 같이 여러 번 실행 해 야 합 니 다.
var str = "zhufeng2015 zhufeng2016";
"zhufeng" -> " "
str = str.replace("zhufeng", " ").replace("zhufeng", " ");
어떤 때 는 여러 번 실행 해도 교 체 를 실현 하지 못 할 때 가 있다.
"zhufeng" -> "zhufengpeixun"
str = str.replace("zhufeng", "zhufengpeixun").replace("zhufeng", "zhufengpeixun");
[첫 번 째 매개 변 수 는 정규 일 수 있 습 니 다] 정규 와 일치 하 는 모든 내용 을 교체 합 니 다. (그러나 캡 처 와 마찬가지 로 기본 값 은 게 으 름 입 니 다. 전역 수정자 g 를 추가 해 야 합 니 다)
var str = "zhufeng2015 zhufeng2016";
str = str.replace(/zhufeng/g, "zhufengpeixun");
console.log(str);
1) 실행 및 실행 횟수 문제
사실 exec 포획 원리 랑 똑 같 아 요.
예 를 들 어 우리 의 두 번 째 매개 변 수 는 하나의 함 수 를 전달 하면 정규 문자열 에서 현재 함 수 를 한 번 캡 처 할 때마다 한 번 실 행 됩 니 다. - > 본제 에서 모두 두 번 캡 처 되 었 기 때문에 함수 가 두 번 실 행 했 습 니 다.
var str = "zhufeng2015 zhufeng2016";
str = str.replace(/zhufeng/g, function () {
2) 매개 변수 문제
console.dir(arguments); function 을 실행 할 뿐만 아니 라 함수 에 도 파 라 메 터 를 전달 하고 전달 하 는 매개 변 수 는 매번 exec 가 캡 처 한 내용 과 똑 같 습 니 다. 첫 번 째 exec 캡 처 - > ["zhufeng", index: 0, input: "원본 문자열"] 함수 의 매개 변 수 를 처음 실행 합 니 다. arguments[0] -> "zhufeng"/**/ arguments[1] -> 0 exec 의 index 가 캡 처 하기 시작 한 색인 위치 에 해당 합 니 다. arguments [2] - > "원본 문자열" 은 exec 의 input 에 해당 합 니 다.
3) 반환 값 문제
return 이 되 돌아 오 는 것 은 현재 캡 처 한 내용 을 무엇으로 바 꾸 는 것 과 같 습 니 다.
return "zhufengpeixun";
});
console.log(str);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.