정규 표현 식 뒤에 지정 한 문자열 내용 을 포함 하지 마 십시오.
<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
모든 문자 에 대해 전망 검 사 를 하려 면 마지막 쓰기 만 이 이해 하기 쉽다.총결산
위 에서 말 한 것 은 소 편 이 소개 한 정규 표현 식 뒤에 지정 한 문자열 내용 을 포함 하지 않 고 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
awk 상용 명령awk 는 모든 입력 줄 을 하나의 기록 으로 인식 하고 그 줄 의 모든 단어 도 메 인 을 하나의 필드 로 인식 합 니 다. ARGC 명령 줄 에 awk 스 크 립 트 가 들 어 오 는 매개...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.