AI 보이는 추론 실험실

같은 글자 A를 검사했는데 test 결과가 왜 번갈아 바뀔까?

g 플래그 정규식 객체를 재사용하면서 lastIndex의 전후 값을 기록하고, 새 객체·위치 초기화·일반 검사와 비교합니다.

탐구게시 2026-10-21읽기·실험 약 9분확인 문제 2개규칙 기반 실행한국논리학협회 자체 제작제작·검수 LTCT 편집부

자료실의 파란 작업대에서 관찰 카드를 차례로 짚어 보는 여성과 필통 곁에서 손가락의 움직임을 바라보는 작은 공식 올리
학습 장면을 표현한 AI 생성 이미지입니다. 사진 속 배치·화면은 실제 측정·운영 기록이 아닙니다. · 주제 이해를 돕기 위한 AI 생성 이미지 · LTCT 자체 제작
오늘의 질문

const r=/A/g로 만든 같은 객체에서 r.test("A")를 반복하면 왜 참·거짓이 번갈아 나올까요?

같은 A를 /A/g로 검사할 때 위치 0에서 성공 후 1이 되고 다음 검사 실패 후 0으로 돌아오는 네 단계
같은 A를 /A/g로 검사할 때 위치 0에서 성공 후 1이 되고 다음 검사 실패 후 0으로 돌아오는 네 단계 · 한국논리학협회 자체 제작
그림 크게 보기 ↗
01

입력 글자 외에 남아 있는 탐색 위치도 확인합니다

가상 자료 카드마다 글자 A가 있는지 검사한다고 합시다. AI가 /A/g 객체를 한 번 만들고 같은 글자 "A"에 test를 반복하면 결과가 참, 거짓, 참, 거짓으로 나올 수 있습니다. 원문 글자가 바뀌어서가 아닙니다. 같은 정규식 객체에 이전 검사의 탐색 위치가 남아 있기 때문입니다.

테스트(test, 일치 여부 검사)는 일치하는 부분이 있으면 true, 없으면 false를 돌려줍니다. g는 글로벌(global, 전체 탐색) 플래그입니다. 이 설정을 가진 정규식 객체는 래스트 인덱스(lastIndex, 다음 탐색을 시작할 위치)를 검사 중 바꿉니다. 활동은 입력과 플래그뿐 아니라 그 위치의 전후 값도 표시합니다.

02

한 글자를 찾은 뒤에는 위치 1에서 시작합니다

처음 lastIndex가 0이면 /A/g는 "A"의 첫 글자를 찾아 참을 돌려주고 lastIndex를 일치 구간 뒤인 1로 바꿉니다. 두 번째 호출은 같은 문자열의 위치 1부터 찾습니다. 그 뒤에는 A가 없으므로 실패하여 거짓을 돌려주고 lastIndex를 0으로 되돌립니다. 세 번째 호출은 다시 위치 0에서 출발합니다.

"ABA"로 바꾸면 첫 호출은 참·위치 1, 두 번째는 참·위치 3, 세 번째는 거짓·위치 0입니다. g가 있으면 문자열 처음부터 새로 찾는다는 식으로만 설명해서는 이 반복을 예측할 수 없습니다. 화면 표의 ‘검사 전 위치’와 ‘검사 후 위치’를 함께 보세요.

03

일치 여부만 묻는 검사에는 상태 처리를 정합니다

매 카드에 A가 있는지만 독립적으로 묻는다면 /A/처럼 g가 없는 표현식을 사용할 수 있습니다. 활동에서는 같은 객체를 계속 사용해도 "A"의 검사 결과가 매번 참입니다. 매번 /A/g 객체를 새로 만들거나 각 호출 직전에 lastIndex를 0으로 돌리는 방법도 기본 입력에서는 같은 결과를 냅니다.

어느 방법이 필요한지는 작업 목적에 따라 달라집니다. 한 문자열 안에서 다음 일치를 차례로 찾으려는 작업이라면 탐색 위치가 이어지는 성질이 필요할 수 있습니다. 그때 매번 0으로 되돌리면 첫 일치만 반복할 수 있습니다. 활동에서 ‘같은 객체 재사용’과 ‘매번 위치 초기화’를 바꾸며 무엇을 보존하려는지 설명해 보세요.

04

되풀이된 거짓을 글자 부재로 바로 번역하지 않습니다

이 활동의 글자는 A 하나로 고정하고, 입력은 A·ABA·BBB·빈 문자열 중에서 선택합니다. 빈 문자열이나 BBB는 모든 선택 방식에서 일치하지 않습니다. A·ABA에서는 객체 재사용과 플래그의 차이가 드러납니다. 반복 횟수를 바꾼 뒤에도 처음 검사 위치를 0으로 정한 새 관찰 묶음으로 실행합니다.

이 결과는 g가 있는 내장 정규식과 비어 있지 않은 패턴 A의 실험입니다. y 플래그, 빈 문자열에도 일치하는 패턴, 사용자 정의 exec, 임의의 긴 정규식 성능을 검수했다는 뜻은 아닙니다. AI가 ‘이번 행에는 A가 없다’고 보고했다면 검사 전 위치와 객체 재사용 여부를 먼저 확인하세요. 이 활동은 실제 학생 자료나 운영 로그를 읽지 않습니다.

직접 확인하기 · 규칙 기반 실행

반복 호출과 탐색 위치 기록

입력 A·같은 객체 재사용에서 네 호출의 참·거짓과 위치 0·1 변화를 읽습니다. g 없음, 매번 새 객체, 매번 위치 0 초기화를 각각 선택해 결과가 어떻게 바뀌는지 확인합니다. 입력을 ABA로 바꾸고 세 번의 호출 결과를 예측합니다. BBB·빈 문자열도 대조한 뒤 초기화합니다.

조건을 바꾸어 직접 확인하기

표현식: /A/g · 입력: "A"

각 호출의 탐색 위치와 반환값
호출검사 전 위치test 결과검사 후 위치
10참 (true)1
21거짓 (false)0
30참 (true)1
41거짓 (false)0

입력을 바꾸면 위치 0에서 새 관찰 묶음을 계산합니다. 실제 내장 RegExp.test를 사용하며 외부 자료나 AI API를 호출하지 않습니다.

관계를 읽고, 다른 상황에 적용하기

두 문제로 생각 확인

1lastIndex가 0인 같은 /A/g 객체로 "A"를 두 번 검사한 결과는?
2각 입력의 포함 여부를 독립적으로 검사할 때 활동에서 상태 누적을 피하는 방법은?

두 문제의 답을 모두 선택하면 해설을 볼 수 있습니다.

나의 설명으로 마무리

오늘 발견한 관계

저장 위치를 확인하고 있습니다…

출처와 제작 안내

원문을 참고해 설명·도표·문항·실험을 새로 작성했습니다. 별도 표시가 없는 사례와 수치는 학습을 위한 가상 예시입니다. 원문 번역이나 실제 모델의 성능 평가 자료가 아닙니다.

  1. 정규식 검사와 탐색 위치 갱신 ↗Ecma International / TC39ECMAScript 2025 §22.2.6.16 / §22.2.7.2

    g 플래그의 lastIndex 읽기·성공 뒤 일치 끝 위치·실패 뒤 0 재설정 및 g/y 없는 탐색 시작을 확인. A·ABA 비교는 자체 실행.