정규 표현 식 지식 점 해석 및 판독 유효 숫자,핸드폰 번호 메 일 박스 정규 표현 식
일치:현재 문자열 이 우리 의 규칙 에 맞 는 지 확인 합 니 다.(모든 정규 규칙 은 하나의 규칙 입 니 다)
캡 처:전체 문자열 에서 규칙 에 맞 는 문 자 를 순서대로 가 져 옵 니 다->exec,match,replace
2.정규 구성:메타 문자,수정자
문자:
특별한 의미 의 메타 문자:
\\d 가 0-9 의 숫자 와 일치 하 는 것 은[0-9]와 반대 되 는 것 입 니 다.
\\D 는 0-9 를 제외 한 임의의 문자 와 일치 합 니 다[]
\w 는 0-9,a-z,A-Z 와 일치 합 니 다.의 숫자 나 문 자 는[0-9a-zA-Z]에 해당 합 니 다. 、
\s 공백 문자 일치(빈 칸,탭 문자...)
\\b 한 단어의 경계"w100 w000"과 일치 합 니 다.
\t 탭 문자 일치
줄 바 꿈 일치
제외 한 임의의 문자 와 일치 합 니 다.
^어떤 문자 로 시작
$어떤 메타 문자 로 끝 납 니 다.
번역 문자
x|y 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:전역 일치
항목 에 자주 사용 되 는 정규
1)유효 숫자의 정규 판단
유효 숫자 는 양수,음수,0,소수 를 가리킨다
제1 부분:가감 이 나타 날 수도 있 고 없 을 수도 있다
두 번 째 부분:한 자릿수 는 0 일 수 있 고 여러 자리 수 는 0 으로 시작 할 수 없다.
세 번 째 부분:소수 가 있 을 수도 있 고 소수 가 없 을 수도 있 지만 소수점 이 나타 나 면 뒤에 적어도 한 자리 의 숫자 가 따른다.
var reg =/^[+-]?(\d|[1-9]\d+)(\.\d+)?$/;
유효한 정수(0 포함):/^[+]?(\\d|[1-9]\d+)$/;
유효한 음정 수(0 포함):/^-(\d|[1-9]\\d+)$/;
핸드폰 번호 판단(심 플 버 전):
var reg=/^1\d{10}$/;
판단 메 일 박스
첫 번 째 부분:숫자,알파벳,밑줄,-한 명 에서 여러 명
제2 부분:@
세 번 째 부분:숫자,자모,1 부터 여러 자리
네 번 째 부분:(.2~4 위).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 = /^[\u4e00-\u9fa5]{2,4}$/;
주민등록번호
상위 6 위 는 성->시->현(구)
네 분 년 두 분 월 두 분 의 날
단판
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 이 나 오 는데 숫자 18 이 아니 라 1 이나 8 이다.예 를 들 어[18-65]는 1 이나 8-6 이나 5 중 에 하 나 를 선택한다.
1.exec 정규 캡 처 방법->먼저 일치 한 다음 에 일치 하 는 내용 을 캡 처 합 니 다.
만약 문자열 이 이 정규 와 일치 하지 않 는 다 면,포 획 된 반환 결 과 는 null 입 니 다
정규 와 일치 하면 되 돌아 오 는 결 과 는 배열 입 니 다.
예시
var str ="2015zhufeng2016peixun"
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 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정규 표현 식 자바 와 js 의 차이정규 표현 식 으로 핸드폰 번 호 를 검증 합 니 다. //핸드폰 번호 형식 if (!mobile.matches("1([3-9])(\\d{9})")) { //전의 문자 가 하나 더 생 겼 습 니 다. 그러...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.