본문으로 건너뛰기
AZ Tools

찾기·바꾸기

텍스트 블록 검색·치환. 선택적 정규식 + global·대소문자·multiline·dotAll 플래그. 실시간 매치 수.

출력
왼쪽에 텍스트 붙여넣기.

자바스크립트 정규식 문법 사용. 정규식 모드에서 치환은 그룹용 $1·$2·…과 전체 매치용 $& 지원.

사용법

  1. 왼쪽에 텍스트 붙여넣기.
  2. 찾기 패턴(필요 시 치환 문자열) 입력.
  3. 고급 패턴엔 정규식 모드 토글. 매치 수 실시간 갱신으로 복사 전 확인.

자세한 설명

펼치기

문자 그대로 찾기와 정규식 두 모드를 지원하는 단순한 찾아 바꾸기입니다. 문자 모드에서는 찾을 문자열을 이스케이프해서 정규식 특수 문자가 제 모습 그대로 동작합니다. 정규식 모드에서는 자바스크립트 정규식 전체를 쓸 수 있습니다. 캡처 그룹($1, $2), 역참조, 유니코드(\u 플래그는 항상 켜짐)를 포함합니다. 기본값은 대소문자 구분 없음이고 필요할 때 켜면 됩니다. 여러 줄과 dotAll 플래그는 그것이 의미를 갖는 정규식 모드에서만 보입니다.

문자 모드가 있는 이유는 대부분의 찾아 바꾸기 작업이 정규식 엔진이 명령으로 읽을 문자를 포함하기 때문입니다. 점은 아무것이나 맞추고, 물음표는 앞의 것을 선택적으로 만들며, 괄호는 나타나는 대신 묶습니다. 그래서 정규식 모드에서 example.com을 찾으면 exampleXcom도 걸립니다. 패턴을 이스케이프하면 그런 뜻밖의 일이 통째로 사라지며, 기계 장치가 특별히 필요한 경우가 아니라면 머물러 있을 모드가 이쪽입니다.

바꿀 문자열은 문자 모드에서도 자기 문법을 갖고 있고, 지켜볼 글자는 $입니다. $&는 일치한 전체를, $ 뒤에 백틱을 붙인 패턴은 그 앞의 전부를, $'는 그 뒤의 전부를 넣으며, 이 셋은 패턴에 그룹이 있든 없든 언제나 특수합니다. $1은 해당 그룹이 있으면 그것을 넣고 없으면 글자 그대로 남는데, 그래서 달러 기호가 든 치환 문자열이 손대지도 않은 패턴에 따라 다르게 동작합니다. 글자 그대로의 달러는 $$로 적습니다.

여러 줄 플래그는 ^와 $의 뜻만 바꾸며, 패턴이 줄을 넘을 수 있는지를 바꾸지 않습니다. 켜면 입력의 양 끝이 아니라 줄 경계마다 일치하는데, 줄 단위 편집에서 원하는 동작이 그것입니다. 줄바꿈을 넘어 일치시키는 것은 dotAll 플래그의 일입니다. 그렇지 않으면 .은 줄바꿈을 넘기를 거부하기 때문입니다.

정규식은 중첩 구조를 파싱할 수 없고, 이것이 몸에 익혀 둘 한계입니다. HTML 태그, 짝이 맞는 괄호, 구분자를 품은 인용 문자열은 모두 패턴이 기술할 수 있는 범위 밖이라, 표본에서 잘 돌던 치환이 중첩된 경우가 든 첫 입력에서 깨집니다. 그런 것에는 파서가 도구이고 정규식은 함정입니다.

자주 묻는 질문

매치 유지하고 태그로 감싸려면?

정규식 모드 켜기. 치환란에 $&로 전체 매치·$1·$2로 캡처 그룹. 예: 찾기 \b\w+\b·치환 <em>$&</em>으로 모든 단어 감쌈.

왜 ^이 줄 시작과 매치 안 됨?

기본적으로 ^은 문자열 맨 처음만 매치. multiline(m 플래그) 켜면 ^·$이 줄 시작·끝과 매치.

왜 .이 줄바꿈 매치 안 함?

기본 .은 줄바꿈 건너뜀. dotAll(s 플래그) 켜면 진정한 '아무 문자' 동작.

치환에 리터럴 $ 포함?

자바스크립트 정규식 치환은 $을 특수 문자로 취급. $$로 단일 리터럴 $ 삽입. 찾기 쪽은 그런 문제 없음 — 리터럴 문자열은 정규식 되기 전 이스케이프.

문자 종류나 문자 체계로 매칭할 수 있나요? '모든 글자'나 '모든 한글'처럼요

됩니다. 유니코드 플래그가 항상 켜져 있어서 속성 이스케이프를 쓸 수 있습니다. \p{L}은 어떤 문자 체계든 글자, \p{N}은 숫자, \p{Script=Hangul}은 한글 음절, \p{Script=Han}은 한중일 한자에 매칭됩니다. 'héllo κόσμε 123'에서 \p{L}+는 héllo와 κόσμε를 찾고 숫자는 건드리지 않습니다. [a-zA-Z]+로는 h와 llo만 겨우 잡힙니다. 같은 플래그 덕분에 .도 코드 포인트 전체에 매칭되어 이모지를 반으로 쪼개 출력을 망가뜨리지 않고 한 단위로 다룹니다.

다른 편집기에서는 되는 정규식이 여기서는 거부되는데 왜인가요?

거의 언제나 같은 유니코드 플래그 때문입니다. 이 플래그는 비유니코드 모드가 조용히 봐주던 이스케이프를 금지합니다. a\-b는 다른 곳에서는 컴파일되지만 여기서는 오류가 납니다. \-는 문자 클래스 밖에서 유효한 이스케이프가 아니기 때문입니다. a-b로 쓰거나 하이픈을 [ ] 안에 넣으세요. 홀로 쓴 \p도 오류입니다. 이제는 반드시 \p{...} 형태여야 합니다. 문자 그대로 쓰려는 중괄호는 \{ 와 \}로 이스케이프해야 합니다. 해법은 언제나 더 많이가 아니라 더 적게 이스케이프하는 것, 즉 불필요한 역슬래시를 빼는 것입니다.

관련 도구