첫 번째 그룹에서 괄호로 묶이지 않은 문자열과 괄호로 묶인 문자열을 캡처하는 정규식을 만들려고합니다.
예 :
2 (3) (4) (5)
2-첫 번째 그룹, 3-두 번째 그룹 등이어야합니다.
내가 생각 해낸 것은이 정규식입니다. (JavaScript를 사용하고 있습니다)
([^()]*)(?:\((([^)]*))\))*
그러나 A (B) (C) (D)와 같은 문자열을 입력하면 A와 D 만 캡처됩니다.
https://regex101.com/r/HQC0ib/1
누구든지 이것에 대해 나를 도울 수 있고 아마도 오류가 어디에 있는지 설명 할 수 있습니까?
\G
연속 일치를 일치시키기 위해 JS 정규식에서 앵커를 사용할 수없고 .NET / PyPi 정규식 라이브러리 에서처럼 각 캡처 그룹에 대한 스택이 없기 때문에 2 단계 접근 방식을 사용해야합니다. 1) 문자열을 다음과 같이 일치시킵니다. 텍스트의 전체 줄무늬, 2) 필요한 값을 얻기 위해 사후 처리합니다.
var s = "2(3)(4)(5) A(B)(C)(D)";
var rx = /[^()\s]+(?:\([^)]*\))*/g;
var res = [], m;
while(m=rx.exec(s)) {
res.push(m[0].split(/[()]+/).filter(Boolean));
}
console.log(res);
나는 추가 \s
부정 된 문자 클래스에 [^()]
나는 하나의 문자열로 예제를 추가하기 때문이다.
패턴 세부 정보
[^()\s]+
- (
, )
및 공백을 제외한 1 개 이상의 문자(?:\([^)]*\))*
-0 개 이상의 시퀀스 :
\(
- ㅏ (
[^)]*
-0 개 이상의 문자 )
\)
- ㅏ )
분할 정규식은 [()]+
하나 이상의 )
또는 (
문자 와 일치 filter(Boolean)
하고 빈 항목을 제거하는 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다