반응형
JavaScript Regexp에서 임의의 수의 그룹을 캡처하는 방법은 무엇입니까?
이 JavaScript 줄을 기대합니다.
"foo bar baz".match(/^(\s*\w+)+$/)
다음과 같이 반환합니다.
["foo bar baz", "foo", " bar", " baz"]
대신 마지막으로 캡처 된 일치 만 반환합니다.
["foo bar baz", " baz"]
캡처 한 모든 경기를 얻을 수있는 방법이 있습니까?
캡처 그룹을 반복하면 대부분의 플레이버에서 마지막 캡처 만 유지됩니다. 이전 캡처를 덮어 씁니다. .NET과 같은 일부 버전에서는 모든 중간 캡처를 얻을 수 있지만 Javascript에서는 그렇지 않습니다.
즉, Javascript에서 N 캡처 링 그룹 이있는 패턴이있는 경우 해당 그룹 중 일부가 반복 되더라도 일치 당 정확히 N 개의 문자열 만 캡처 할 수 있습니다 .
따라서 일반적으로 수행해야 할 작업에 따라 다음과 같이 말합니다.
- 옵션 인 경우 대신 구분 기호로 분할
- 일치하는 대신 루프
에서
/(pattern)+/
일치 할/pattern/g
수도 있습니다.exec
- 이 두 가지는 정확히 동일하지는 않지만 옵션 일 수 있습니다.
- 다단계 일치 수행 :
- 한 경기에서 반복되는 그룹 캡처
- 그런 다음 다른 정규식을 실행하여 해당 일치를 분리하십시오.
참고 문헌
예
다음 <some;words;here>
은 텍스트에서 일치 하고 exec
루프를 사용한 다음 분할하여 ;
개별 단어를 얻는 예입니다 ( ideone.com 참조 ).
var text = "a;b;<c;d;e;f>;g;h;i;<no no no>;j;k;<xx;yy;zz>";
var r = /<(\w+(;\w+)*)>/g;
var match;
while ((match = r.exec(text)) != null) {
print(match[1].split(";"));
}
// c,d,e,f
// xx,yy,zz
사용되는 패턴은 다음과 같습니다.
_2__
/ \
<(\w+(;\w+)*)>
\__________/
1
이 경기는 <word>
, <word;another>
, <word;another;please>
, 등의 그룹이 단어의 수를 캡처 반복하지만 마지막 캡처를 유지할 수 있습니다. 전체 단어 목록은 그룹 1에 의해 캡처됩니다. 이 문자열은 split
세미콜론 구분 기호에 있습니다.
관련 질문
이건 어때? "foo bar baz".match(/(\w+)+/g)
문자열을 분할하는 방법에 대해 더 복잡한 요구 사항이없는 한, 문자열을 분할 한 다음 초기 문자열을 반환 할 수 있습니다.
var data = "foo bar baz";
var pieces = data.split(' ');
pieces.unshift(data);
'g'를 사용해보십시오.
"foo bar baz".match(/\w+/g)
반응형
'code' 카테고리의 다른 글
비트 맵 크기 조정 / 크기 조정 후 이미지 품질이 좋지 않습니다. (0) | 2020.10.18 |
---|---|
XAMPP로 SSL 활성화 (0) | 2020.10.18 |
N-way 병합을위한 알고리즘 (0) | 2020.10.17 |
Python 상속 : TypeError : object .__ init __ ()에는 매개 변수가 없습니다. (0) | 2020.10.17 |
CSS 미디어 쿼리 중복에 대한 규칙은 무엇입니까? (0) | 2020.10.17 |