>  기사  >  웹 프론트엔드  >  반복되는 JavaScript 정규식에서 여러 그룹을 캡처하는 방법은 무엇입니까?

반복되는 JavaScript 정규식에서 여러 그룹을 캡처하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-13 10:33:02567검색

How to Capture Multiple Groups in a Repeated JavaScript Regex?

Capturing Arbitrary Groups in JavaScript Regexp

When using capturing groups in JavaScript regular expressions, it's essential to understand the limitations. By default, only the last capture of a repeated group is kept, even if the group is nested.

Example: Nested Capture Group

Consider the following regular expression:

/^(\s*\w+)+$/

Expected output:

["foo bar baz", "foo", " bar", " baz"]

Actual output:

["foo bar baz", " baz"]

In this case, only the last captured group, " baz", is returned. This is because JavaScript only retains the final capture for each repeated group.

Options for Capturing Multiple Groups

To overcome this limitation, several options are available:

  • Split on Delimiters: If possible, use string splitting to separate the desired segments.
  • Exec Loop and Splitting: Use an exec loop to repeatedly match the pattern within a string and split the captured group into individual matches.
  • Multilevel Matching: Capture the repeated group in one match and then use another regex to extract the individual segments.

Example: Exec Loop and Splitting

Here's an example using an exec loop to capture and split a nested group:

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(";"));
}

// Output:
// ["c", "d", "e", "f"]
// ["xx", "yy", "zz"]

In this example, the nested group is captured as group 1, which is then split on the semicolon delimiter.

Related Questions

  • How do you access the matched groups in a JavaScript regex?

위 내용은 반복되는 JavaScript 정규식에서 여러 그룹을 캡처하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.