정규 표현식에서 'g' 깃발의 의미는 무엇입니까?
그것의 의미는 무엇입니까?g
정규 표현으로 된 깃발?
어떤 점이 다른가요?/.+/g
그리고./.+/
?
g
전세계 검색을 위한 것입니다.모든 상황과 일치한다는 뜻입니다.여러분도 보통 보게 될 것입니다.i
그 말은 사건을 무시한다는 뜻입니다.
"g" 플래그는 문자열에서 가능한 모든 일치 항목에 대해 정규식을 테스트해야 함을 나타냅니다.
없는.g
플래그, 첫번째 테스트만 할 겁니다.
추가적으로, 그것이 어떻게 설정하는지에 대한 자세한 사항은 아래의 chamberlain의 답변을 반드시 확인하세요.lastIndex
일련의 값에 대해 regex를 다시 사용할 때 예기치 않은 부작용을 초래할 수 있는 property.
자바스크립트로 설명하기 위한 예제:
> 'aaa'.match(/a/g)
[ 'a', 'a', 'a' ]
> 'aaa'.match(/a/)
[ 'a', index: 0, input: 'aaa' ]
@matiska 가 지적했듯이,g
플래그가 설정합니다.lastIndex
재산도 마찬가지입니다.
이것의 매우 중요한 부작용은 일치하는 문자열에 대해 동일한 regex 인스턴스를 재사용하는 경우 검색을 시작하기 때문에 결국 실패한다는 것입니다.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가 문자열 전체에서 패턴을 검색하여 주어진 패턴과 일치하는 모든 발생 항목의 배열을 만듭니다.
그래서 그 차이는/.+/g
그리고./.+/
그것은g
version은 첫번째가 아닌 모든 상황을 찾아낼 것입니다.
사이에 차이가 없습니다./.+/g
그리고./.+/
왜냐하면 그들 둘 다 오직 한 번만 전체 끈과 일치할 것이기 때문입니다.g
정규식이 두 번 이상 일치할 수 있거나 그룹을 포함할 수 있는 경우(이 경우) 차이가 발생합니다..match()
는 그룹 배열 대신 일치하는 배열을 반환합니다.
g
->
모든 일치 항목을 반환합니다.without g
->
첫번째 일치를 반환합니다.
예:
'1 2 1 5 6 7'.match(/\d+/)
돌아온다["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]
. 보시다시피 저희는 첫 경기만 할 수 있습니다."1"
.'1 2 1 5 6 7'.match(/\d+/g)
모든 일치 항목의 배열을 반환합니다.["1", "2", "1", "5", "6", "7"]
.
이미 언급된 것 외에g
깃발, 그것은 영향을 줍니다.regexp.lastIndex
속성:
lastIndex는 다음 일치를 시작할 인덱스를 지정하는 정규식 인스턴스의 읽기/쓰기 정수 속성입니다. (...) 이 속성은 정규식 인스턴스가 전역 검색을 나타내기 위해 "g" 플래그를 사용한 경우에만 설정됩니다.
참조: 모질라 개발자 네트워크
정규식에서 G는 전역 검색을 정의하는 것으로, 모든 행에서 모든 인스턴스를 검색하는 것을 의미합니다.
문자열을 기준으로 예를 들어보겠습니다.문자열에서 모든 발생을 제거하려면."hello world"에서 ""와 함께 "o"의 모든 출현을 제거하고 싶다면 다음과 같이 합시다.
"hello world".replace(/o/g,'');
제 경우에는 첫 글자부터 매번 문자열을 재평가해야 하는 문제가 있습니다. 왜냐하면 이 문제를 제거해야 합니다./my_regexp/
g(global flag) lastIndex 이동을 중지합니다.
mdn에 언급된 바와 같이:
글로벌 (g) 플래그가 설정되어 있는지 확인하십시오. 그렇지 않으면 lastIndex가 더 이상 고급화되지 않습니다.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec#specifications
아마도 당신들 중 일부는 당신의 regex 인스턴스가 그것과 함께 설정되어 있기 때문에 여기에 있을 것입니다.g
플래그가 실패했습니다.
다음은 예입니다.문자 "a"를 포함하는 배열에서 모든 문자열을 찾으려는 경우.
const array = ["today", "cat", "dog", "rabbit"]
const reg = new RegExp("a", "g")
const matchedArray = array.filter(v => {
const matched = reg.test(v)
console.log(`String "${v}", matched: ${matched}`)
})
당신은 그 끈들을 발견할 것입니다.rabit
그리고.today
시험에 합격했지만,cat
안 그래요.
그 이유는 매칭을 한 후에today
성공적으로.lastIndex
됩니다.today
문자열, 즉 4입니다.
그런 다음 regex 인스턴스가cat
. 왜냐면 없어요.a
인덱스 4의 문자, 테스트 실패, 그리고lastIndex
0으로 설정됩니다.
다음 분.dog
테스트에 실패하고.lastIndex
다시 0으로 설정됩니다.그리고나서rabbit
인덱스 0부터 시작하여 테스트됩니다.지나가요.
그래서 결론은 다음과 같습니다. 추가할 경우 주의해야 합니다.g
플래그를 당신의 regex 인스턴스에 보내고 당신은 그것을 다음과 같이 부르려고 합니다.exec
아니면test
여러 번
언급URL : https://stackoverflow.com/questions/12993629/what-is-the-meaning-of-the-g-flag-in-regular-expressions
'programing' 카테고리의 다른 글
표준 시간대를 사용하여 오라클 DATE 열을 타임스탬프 (0) | 2023.10.19 |
---|---|
sql 덤프 파일에서 mariadb를 업그레이드하는 방법은? (0) | 2023.10.19 |
마이그레이션을 실행할 때 "해당 파일 또는 디렉터리 없음" 또는 "해당 호스트를 알 수 없음" (0) | 2023.10.19 |
UI 레이블의 가운데 텍스트 (0) | 2023.10.19 |
PowerShell로 타사 DLL 파일 실행 (0) | 2023.10.19 |