정규 표현 식 지식 점 해석 및 판독 유효 숫자,핸드폰 번호 메 일 박스 정규 표현 식

1.정규 문자열 을 처리 하 는 데 만 사 용 됩 니 다:일치,캡 처
일치:현재 문자열 이 우리 의 규칙 에 맞 는 지 확인 합 니 다.(모든 정규 규칙 은 하나의 규칙 입 니 다)
캡 처:전체 문자열 에서 규칙 에 맞 는 문 자 를 순서대로 가 져 옵 니 다->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);

좋은 웹페이지 즐겨찾기