정규 표현 식 뒤에 지정 한 문자열 내용 을 포함 하지 마 십시오.

이전 에는 <abc(?!def).+>/.exec("<abcdef>
<abczzz>"),
에서 <abczzz>, 까지 만 일치 하 는 간단 한 고정 표기 법 이 었 으 나 실제 사용 횟수 는 거의 0 에 가 까 워 졌 다.
많은 장면 들 이 abc 를 쓰 지 못 하고 순리 대로 /<.+(?!def).+>/.exec("<abcdef>
<abczzz>"),
이 라 고 썼 습 니 다.어?어떻게 앞의 것 을 일치 시 켰 습 니까?입문 부터 포기 까지.
어제(2019-04-07)즉석에서 써 봤 는데 /<(?:.(?!def))+>/.exec("<abcdef>
<abczzz>"),
맞 네요.+(?!제 외 된 문자열)이 구조 가 할 수 있 는 역할 이 잘못 이해 되 었 습 니 다.어쩐지 기대 에 미 치지 못 하 더 라 니.(?!제외 한 문자열)+가 정 해 입 니 다.
풀 리 지 않 는 문 제 를 남 겨 두 었 습 니 다.모든 문자 뒤에 배 제 된 것 은 좋 은 작업 을 할 수 있 습 니 다.길이 가 정 해 지지 않 은 문 자 를 제외 한 후에 어떻게 일 을 할 수 없 습 니까?전망 은 앞의+,*,{}과 작용 하지 않 습 니까?설명 은 끝 을 봐 라.:/<(?!.+def).+>/.exec("<abcdefzzz>
<abczzz>")
표기 법 을 붙 여도 됩 니 다.끝 날 수도 있 습 니 다.+일치 하지 않 을 수도 있 지만 이렇게 쓰 면 안 됩 니 다.:/<.+(?!def)zzz>/.exec("<abcdefzzz>
<abczzz>")。
정규 표현 식 은 지정 한 내용 뒤에 지정 한 문자열 내용 을 포함 하거나 포함 하지 않 습 니 다:
•요:비교적 간단 합 니 다.이 원 하 는 것 을 쓰 면 됩 니 다.
•싫어:보다 훨씬 복잡 한데 어떻게 제거 합 니까?
전제 원칙
1.표현 식 에 고정된 내용 의 문자열 은 쓰 지 않 고 쓸 수 있 으 며,간략하게 쓸 수 있 습 니 다.(예 를 들 어 앞 에 쓴 abc 부분 은 죽 으 면 안 됩 니 다)
2.전망(정방 향)을 소량 사용 할 수 있 습 니 다.후 전망(역방향)은 기본적으로 배우 지 않 습 니 다.배 웠 을 때 브 라 우 저 지원 도 연구 해 야 합 니 다.사용 할 수 없고 너무 많아 도 배 울 수 없습니다.
3.NoJS(Not Only JavaScript);브 라 우 저의 js 뿐만 아니 라그러나 js 의 정규/exp/자 면 량 표기 법 은 친구 가 없 을 정도 로 간결 하고 함수,대상,문자열 은 모두 필요 하지 않 습 니 다.반박 을 받 아들 이지 않다.
일치 하 는 텍스트 를 가정 합 니 다.

htmlRaw=`
<div ***="***
  ***" class="***" ***="***">
  class=" matchX 1"
  <div ***="***
    ***" class="*** matchX ***" ***="*** excludeX ***">
    class=" matchX 2"
  </div>
  class=" matchX 3"
</div>

<div ***="***
  ***" class="***" ***="***">
  class=" matchX 4"
  <div ***="***
    ***" class="*** ***" ***="***">
    class=" matchX 5"
  </div>
  class=" matchX 6"
</div>

......
`;
// : ***       ,         xml  、matchX、excludeX
// : class=" matchX 123456"           ,       

//          ,           ,           
htmlNoWrap=htmlRaw.replace(/[\r
]+/g," "); // (/[\s\S]*/.exec(htmlRaw)||[])[0]
단일 문자 일치 하지 않 기
div.matchX 태그 :<div ***="*** ***" class="*** matchX ***" ***="***"> 일치
[^>]를 직접 사용 하여 matchX 를<>HTML 태그 에 한정 할 수 있 습 니 다.<>의 텍스트 에 끝>문자 가 나타 나 지 말 라 는 뜻 입 니 다.
단일 문 자 는 간단 한 편 입 니 다:

//  
/<div[^>]+matchX[^>]+>/.exec(htmlRaw)[0]
<>태그 에 한정 되 지 않 으 면 아웃 사 이 드 와 일치 할 수 있 습 니 다.그리고 이런 제한 이 없 으 면 조만간 사고 가 날 것 이다.

//  
/<div.+?matchX.+?>/.exec(htmlNoWrap)[0]
/<div[\s\S]+?matchX[\s\S]+?>/.exec(htmlRaw)[0] //           
기타 단일 문자 장면 은 별도로 유연 하 게 운용 된다.
문자열 일치 하지 않 기
1 층 에 excludeX 텍스트 내용 이 없 는 첫 번 째 div 와 일치 하 는 것 은 matchX 4 를 포함 하 는 div 를 되 돌려 주 는 것 입 니 다.
[^]문법 은 한 글자 만 제외 할 수 있 습 니 다.한 문자열 이 없 으 면 어떻게 합 니까?억지로[^abc]라 고 쓰 면 a,b,c 문 자 를 모두 제거 합 니 다.전망 을 사용 하 는 것 외 에 다른 간단 한 방법 이 없 는 것 같다.
본문 으로 시작 하 는(?!제 외 된 문자열)+구조 가 목적 을 달성 할 수 있 습 니 다.핵심 은(?:[^>](?!excludeX))*:

//  
/<div[^>]*>[^<]+<div(?:[^>](?!excludeX))*>[^<]+<\/div>[^<]+<\/div>/.exec(htmlRaw)[0]
문자열 의 일치 성 을 포함 하려 면 필요 한 문자열 을 직접 쓰 면 됩 니 다.상대 적 으로 간단 하고 너무 많 으 면 이런 예 를 쓰 지 않 습 니 다.
미 연구(?!제 외 된 문자열)+구조의 성능.
+(?!배제
때문에제외)탐욕 이 일치 하 는 모든 문자열 에 작용 하지 않 고.+탐욕 이 일치 하 는 마지막 문자 에 만 작용 합 니 다.전망 이 막 을 수 없다 는 뜻 이다.

/<.+(?!def).+>/.exec("<abcdef>
<abczzz>")
첫 번 째.+abcde 에 일치 합 니 다.그 다음은 f 입 니 다.def 가 아 닙 니 다.두 번 째.+는 f 와 일치 합 니 다.정규 에 부합 합 니 다.
추가 기록

/(\d+)(?!\.1)/.exec("123.141")       :
> 123:\d+     .  
> 12:   123.1    (?!\.1),    
>       ,   12

/(.+)(?!\.1)/.exec("123.141")       :
> 123.141:.+       
> 123.141 :   (?!\.1)
>       ,   123.141

/(.(?!\.1))+/.exec("123.141")       :
> 1:.       
> 1:123   (?!\.1)
> 12:.       
> 12:123.  (?!\.1)
> 123:.       
> 12:   123.1    (?!\.1),    ,     
>       ,   12
모든 문자 에 대해 전망 검 사 를 하려 면 마지막 쓰기 만 이 이해 하기 쉽다.
총결산
위 에서 말 한 것 은 소 편 이 소개 한 정규 표현 식 뒤에 지정 한 문자열 내용 을 포함 하지 않 고 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기