AI 보이는 추론 실험실 · 점·줄바꿈·플래그

정규표현식에 m을 붙이면 점이 줄바꿈까지 찾을까?

A와 B 사이의 공백을 줄바꿈으로 바꾸고 s·m 설정을 비교합니다. 점이 허용하는 문자와 점이 반복되는 횟수를 따로 시험합니다.

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

교육 공간에서 성인 여성이 두 줄에 나뉜 A와 B 카드를 가리키며 성인 학습자에게 설명하고 작은 공식 올리가 탁자에서 바라보는 장면
주제 이해를 돕기 위한 AI 생성 이미지 · LTCT 자체 제작
오늘의 질문

자바스크립트의 /A.B/m은 A 다음 줄에 B가 있는 문자열을 찾을 수 있을까요?

A와 B 사이에 줄바꿈 한 개가 있을 때 A.B는 기본 설정과 m에서 불일치, s에서 일치하며 m은 줄 경계와 관련된다는 비교도
A와 B 사이에 줄바꿈 한 개가 있을 때 A.B는 기본 설정과 m에서 불일치, s에서 일치하며 m은 줄 경계와 관련된다는 비교도 · 한국논리학협회 자체 제작
그림 크게 보기 ↗
01

점은 기본 설정에서 줄바꿈을 제외합니다

정규표현식은 글자 배열의 규칙으로 문자열을 찾는 표현입니다. 자바스크립트의 A.B에서 A와 B는 그 글자 자체를, 점은 그 사이에서 허용되는 문자 하나를 뜻합니다. A 공백 B는 찾을 수 있지만 A 다음 줄에 B가 있는 경우는 기본 설정에서 찾지 못합니다. 점이 기본적으로 줄 종결 문자를 제외하기 때문입니다.

“점은 아무 문자나 뜻한다”는 AI의 설명만 믿으면 여러 줄 자료에서 누락이 생길 수 있습니다. 활동은 공백, LF(엘에프, 줄바꿈 문자), CRLF(씨알엘에프, 두 문자로 된 줄바꿈), 역슬래시와 n이라는 두 글자를 구별해 보여 줍니다. 눈에 보이는 줄 수와 내부 문자 배열은 같은 정보가 아닙니다.

참고 · Ecma International · TC39 — 정규표현식의 점과 줄 경계 규칙 ↗

02

s와 m은 바꾸는 규칙이 다릅니다

s 플래그는 닷올(dotAll, 점이 줄 종결 문자도 허용하는 모드)을 켭니다. A와 B 사이에 LF 하나가 있으면 /A.B/s는 일치합니다. m 플래그는 멀티라인(multiline, 여러 줄 경계 처리)이라는 이름이지만 점의 허용 범위를 넓히는 설정은 아닙니다.

m은 시작·끝을 나타내는 ^와 $가 각 줄의 경계에서도 일치할 수 있게 합니다. 이 활동의 A.B에는 그 경계 기호가 없으므로 m만 켜도 줄바꿈을 건너가지 못합니다. 플래그 이름을 “여러 줄이니까 m”으로 연결하기보다 어느 연산 규칙이 바뀌는지 확인해야 합니다.

참고 · Ecma International · TC39 — 정규표현식의 점과 줄 경계 규칙 ↗

03

줄바꿈이 두 문자라면 점 하나로는 부족합니다

CRLF는 CR과 LF라는 두 문자의 조합입니다. /A.B/s의 점은 줄 종결 문자도 허용하지만 한 자리만 차지합니다. CR을 점으로 읽으면 그 다음에 아직 LF가 남아 있으므로 바로 B를 찾는 조건이 맞지 않습니다. 따라서 s를 켜도 이 경우는 일치하지 않습니다.

패턴을 A.*B로 바꾸면 점 뒤의 별표가 점의 반복을 0회 이상 허용합니다. s와 함께 쓰면 CR과 LF 두 문자를 모두 지나 B에 도달합니다. 허용하는 문자의 종류를 바꾸는 일과 반복할 수 있는 횟수를 바꾸는 일은 별개입니다. 화면에서 둘을 한 번에 바꾸지 말고 어느 조건이 결과를 바꿨는지 기록해 보세요.

04

화면의 역슬래시 n이 언제나 줄바꿈은 아닙니다

문자열을 표시하는 코드나 로그는 보이지 않는 LF를 역슬래시 n이라는 표기로 나타낼 수 있습니다. 그러나 실제 데이터에 역슬래시와 n 두 글자가 들어 있는 경우도 있습니다. 활동의 “역슬래시와 n 두 글자” 선택은 후자입니다. 실제 LF 한 개와 길이도 다릅니다.

결과 영역은 원문을 줄바꿈이 보존되는 상자와 JSON 표기 두 방식으로 보여 줍니다. JSON 표기에서 실제 LF는 \n으로, 실제 역슬래시는 \\로 이스케이프됩니다. AI가 복사된 로그를 분석할 때는 표시용 변환을 거친 문자열인지 원래 데이터인지 먼저 확인해야 합니다.

05

찾았다는 결과의 범위도 함께 남깁니다

이 활동은 A.B 또는 A.*B로 일치하는 부분이 있는지 확인합니다. 전체 입력 형식을 검증하거나 모든 일치를 수집하는 프로그램은 아닙니다. A.*B를 실제 긴 문서에 쓰면 의도보다 넓은 구간을 잡을 수 있으며, 엔진과 표현식에 따른 성능 문제도 따로 살펴야 합니다.

AI에게 결과를 보고할 때에는 패턴, 플래그, 원래 문자 배열, 실행한 엔진과 일치한 문자열을 함께 적으세요. 공백에서는 맞고 LF에서는 실패했다는 작은 대조가 “모든 문자”라는 설명에서 빠진 조건을 드러냅니다. 이 실험은 특정 AI의 성능 측정이 아니라 생성한 코드 설명을 실제 실행으로 점검하는 활동입니다.

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

줄바꿈 종류·플래그·점의 반복 횟수 바꾸기

자바스크립트의 실제 RegExp를 짧고 고정된 문자열에 실행합니다. s는 점에 줄 종결 문자도 허용하고 m은 줄 경계 기호 ^와 $의 판정을 바꿉니다. 다른 언어·엔진의 규칙이나 임의의 긴 정규표현식은 시험하지 않습니다.

시험 문자열
A
B

JSON 표기: "A\nB"

/A.B/ → 불일치

실제 RegExp 실행 결과: 일치한 부분 없음

s는 점의 허용 문자, 별표는 반복 횟수에 관여합니다. m은 ^와 $의 줄 경계 판정에 관여합니다.

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

두 문제로 생각 확인

1A와 B 사이에 LF 하나가 있을 때 A.B가 일치하도록 하는 플래그는?
2A와 B 사이에 CRLF 두 문자가 있을 때 /A.B/s가 실패하는 이유는?

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

나의 설명으로 마무리

오늘 발견한 관계

0 / 4,000자

메모는 현재 기기의 브라우저에만 보관됩니다. 계정이나 다른 기기에는 동기화되지 않습니다.

출처와 제작 안내

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

  1. 정규표현식의 점과 줄 경계 규칙 ↗Ecma International · TC39ECMAScript Language Specification · CompileAtom / CompileAssertion

    점은 DotAll이 꺼져 있으면 줄 종결 문자를 제외하고, m 플래그는 ^와 $의 줄 경계 판정을 바꾼다는 규칙을 확인했습니다. 활동은 고정된 짧은 시험 문자열만 실행합니다.