[javascript] 정규식에서 ‘g’플래그의 의미는 무엇입니까?

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

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



답변

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

참조 : 글로벌-JavaScript | MDN

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

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


답변

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

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

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


답변

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

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

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


답변

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


답변

@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);


답변

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

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

참조 : Mozilla 개발자 네트워크


답변

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