정규식에서 'g'플래그의 의미는 무엇입니까?


110

g정규식 에서 플래그 의 의미는 무엇입니까 ?

/.+/g과 의 차이점은 무엇입니까 /.+/?

답변:


130

g글로벌 검색 용입니다. 모든 발생과 일치한다는 의미입니다. 일반적으로 i대소 문자 무시를 의미하는 것도 볼 수 있습니다.

참조 : 글로벌-JavaScript | MDN

"g"플래그는 문자열에서 가능한 모든 일치에 대해 정규식을 테스트해야 함을 나타냅니다.

g플래그가 없으면 첫 번째 만 테스트합니다.


1
따라서 / g 플래그는 .test 함수를 사용할 때 관련이 없습니다. 어쨌든 첫 번째 일치 항목 만 찾기 때문입니다.
xr280xr

10
@ xr280xr 관련이 없으며 비생산적입니다. RegExp를 다시 사용하면 문제가 발생합니다. var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
Janosch


41

설명 할 자바 스크립트의 예 :

> 'aaa'.match(/a/g)
[ 'a', 'a', 'a' ]

> 'aaa'.match(/a/)
[ 'a', index: 0, input: 'aaa' ]

10

g 전역 검색 플래그입니다.

전역 검색 플래그는 RegExp가 문자열 전체에서 패턴을 검색하도록하여 주어진 패턴과 일치하는 모든 항목의 배열을 만듭니다.

차이 사이 있도록 /.+/g하고하는 것은 /.+/ 것입니다 g버전 대신 첫 번째의 모든 발생을 찾을 수 있습니다.


9

/.+/g와 사이에는 차이가 없습니다. /.+/둘 다 전체 문자열과 한 번만 일치하기 때문입니다. 는 g정규 표현식 번 이상 일치하거나 경우가있는 그룹을 포함 할 수 있다면 차이가 .match()일치하는 배열 대신 그룹의 배열을 반환됩니다.


8

@matiska가 지적했듯이 g플래그는lastIndex 속성도 .

이것의 매우 중요한 부작용은 일치하는 문자열에 대해 동일한 정규식 인스턴스를 재사용하는 경우 lastIndex.

// regular regex
const regex = /foo/;

// same regex with global flag
const regexG = /foo/g;

const str = " foo foo foo ";

const test = (r) => console.log(
    r,
    r.lastIndex,
    r.test(str),
    r.lastIndex
);

// Test the normal one 4 times (success)
test(regex);
test(regex);
test(regex);
test(regex);

// Test the global one 4 times
// (3 passes and a fail)
test(regexG);
test(regexG);
test(regexG);
test(regexG);


6

이미 언급 된 g플래그의 의미 외에도 regexp.lastIndex속성에 영향 을줍니다.

lastIndex는 다음 일치를 시작할 인덱스를 지정하는 정규식 인스턴스의 읽기 / 쓰기 정수 속성입니다. (...)이 속성은 정규식 인스턴스가 전역 검색을 나타 내기 위해 "g"플래그를 사용한 경우에만 설정됩니다.

참조 : Mozilla 개발자 네트워크


3

정규식에서 G는 전역 검색을 정의합니다. 즉, 모든 행의 모든 ​​인스턴스를 검색합니다.


1

문자열을 기반으로 한 예를 제공합니다. 문자열에서 모든 항목을 제거하려는 경우. "hello world"에서 ""와 함께 "o"의 모든 항목을 제거하려면

"hello world".replace(/o/g,'');

0
  1. g -> 모든 일치를 반환
  2. without g -> 첫 번째 일치를 반환

예:

  1. '1 2 1 5 6 7'.match(/\d+/)를 반환합니다 ["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]. 보시다시피 우리는 첫 경기 만 할 수 있습니다 "1".
  2. '1 2 1 5 6 7'.match(/\d+/g)모든 일치 항목의 배열을 반환합니다 ["1", "2", "1", "5", "6", "7"].

1
더 자세히 설명해주세요. "모든 일치"와 "첫 번째 일치"의 차이점은 무엇입니까?
Nico Haase

나는 더 설명했다. 지도 해 주셔서 감사합니다
Nagibaba

@NicoHaase 마이너스 비율을 제거해 주시겠습니까? 좀 더 설명하려고 노력했습니다.
Nagibaba

오해 죄송합니다 :)
Nagibaba
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.