마크다운 링크 추출 방법, 표로 한번에 보기

마크다운으로 쓰인 글이나 README에서 [텍스트](URL) 형식의 링크만 따로 뽑아내는 문제는, 결국 대괄호와 소괄호 쌍을 정규식으로 찾아내는 문제로 귀결됩니다. 링크와 이미지()는 앞에 느낌표 하나가 붙었는지로만 구분되기 때문에, 문서가 길어지면 눈으로 훑어서는 놓치기 쉽습니다.
이 글은 그 파싱 원리를 그대로 보여주고, 참조 스타일 링크나 괄호가 든 URL처럼 이 방식이 놓치는 경우까지 정리합니다.
요약 ① 마크다운 링크
[텍스트](URL)와 이미지는 앞의 느낌표(!) 하나로만 구분됩니다. ② 참조 스타일 링크([text][ref])나 URL 안에 괄호가 든 경우는 단순 정규식 매칭으로 정확히 추출되지 않을 수 있습니다. ③ 결과는 표·URL 목록·JSON 세 가지 형식으로 볼 수 있고, 형식마다 담기는 정보 범위가 다릅니다.
링크가 많은 문서에서는 눈으로 세는 게 오히려 더 틀립니다
예를 들어 참고자료를 여러 개 붙인 README나 블로그 초안을 번역·검수하려고 URL만 목록으로 뽑아야 하는 상황이 있습니다. [설명 텍스트](url) 형태의 하이퍼링크와  형태의 이미지 링크는 겉보기에 거의 같아서, 스크롤하며 손으로 옮기다 보면 이미지 링크를 하이퍼링크로 착각하거나 반대로 두는 일이 생깁니다.
문서 하나에 링크가 열 개 안팎이면 손으로 세도 크게 틀리지 않습니다. 하지만 수십~수백 개가 섞여 있는 문서라면 이야기가 다릅니다. 어느 링크를 이미 옮겼는지 표시하지 않으면 중복이나 누락이 생기고, 문단 사이에 끼어 있는 짧은 링크 하나가 통째로 빠지는 경우도 흔합니다.
마크다운 링크 문법을 직접 읽어 추출하는 방법
마크다운 인라인 링크 문법은 [링크 텍스트](목적지 URL) 형태이고, 이미지 문법은 그 앞에 느낌표를 붙인  형태입니다. 이 둘을 텍스트에서 직접 찾아내려면, 대괄호 한 쌍과 그 바로 뒤에 이어지는 소괄호 한 쌍을 정규식으로 매칭하면 됩니다.
패턴으로 쓰면 (!)?\[([^\]]+)\]\(([^)]+)\) 입니다. 맨 앞의 (!)?는 이미지 여부를 가리는 느낌표, \[([^\]]+)\]는 대괄호 안 링크 텍스트, \(([^)]+)\)는 소괄호 안 URL을 각각 잡아냅니다.
grep으로 실제 문서에 바로 적용해보기
터미널에서 직접 해보려면 grep으로도 충분합니다.
grep -oE '!?\[[^]]+\]\([^)]+\)' README.md
이 명령을 실행하면 파일 안의 모든 링크·이미지 매치가 한 줄씩 출력됩니다. 결과 줄이 느낌표로 시작하면 이미지, 아니면 하이퍼링크입니다. 텍스트 에디터의 찾기 창을 정규식 모드로 켜고 같은 패턴을 넣어도 동일하게 전체 매치를 하이라이트해서 확인할 수 있습니다.
이렇게 찾은 매치를 손으로 표나 목록으로 옮기면 원하는 결과를 얻을 수 있습니다. 원리 자체는 아래 도구가 내부에서 처리하는 방식과 같습니다. 다만 문서 하나에 매치가 수십~수백 건이면, 그걸 하나씩 옮겨 적는 작업 자체가 시간이 걸립니다.
저희 도구로 확인하기.
붙여넣기만 하면 즉시 표·URL 목록·JSON으로 변환됩니다. 설치나 가입 없이 브라우저에서 바로 처리됩니다.

흔한 착각과 이 방식이 놓치는 경우
출력 형식은 세 가지이고, 담기는 정보 범위가 서로 다릅니다.
| 형식 | 보여주는 내용 | 이럴 때 적합 |
|---|---|---|
| 표 | 앵커 텍스트 + 클릭 가능한 URL | 링크 텍스트와 주소를 함께 확인할 때 |
| URL 목록 | 순수 URL만 줄바꿈으로 나열 | 주소만 복사해 다른 곳에 붙여넣을 때 |
| JSON | {text, url, isImage} 객체 배열 | 다른 스크립트나 프로그램에 그대로 넣을 때 |
참조 스타일 링크는 왜 빠질까
가장 자주 놓치는 지점은 참조 스타일 링크입니다. [텍스트][ref] 처럼 대괄호 쌍이 연속되고 소괄호가 없는 문법은, [텍스트](URL) 패턴과 구조 자체가 달라 매칭되지 않습니다.
이 문법은 본문과 별도로 [ref]: URL 형태의 정의 줄까지 찾아 연결해야 하는데, 그건 다른 정규식이 필요한 별개의 작업입니다.
URL 안에 괄호가 포함된 경우도 놓치기 쉽습니다. 위키 문서 URL처럼 주소 중간에 (동음이의) 같은 괄호가 들어 있으면, 정규식이 첫 번째 닫는 괄호에서 멈추기 때문에 URL이 중간에서 잘려 나옵니다.
이미지 옵션과 URL 검증 범위
이미지 링크가 결과에 안 보인다면 대부분 옵션 문제입니다. '이미지 포함' 체크박스 기본값이 꺼짐(false)이라, 켜지 않으면  매치는 통계와 결과 목록에서 제외됩니다.
그리고 추출된 URL은 trim만 적용될 뿐 별도의 유효성 검사를 거치지 않으므로, 오타가 있거나 상대경로인 주소도 그대로 결과에 포함됩니다.
정리
- 마크다운 링크와 이미지는 앞의 느낌표(!) 하나로 구분됩니다.
- 인라인 링크
[텍스트](URL)형태만 정확히 추출되고, 참조 스타일 링크는 대상이 아닙니다. - URL에 괄호가 포함되면 첫 닫는 괄호에서 잘릴 수 있습니다.
- '이미지 포함' 체크박스는 기본이 꺼져 있어, 켜지 않으면 이미지 링크가 결과에서 빠집니다.
- 결과는 표·URL 목록·JSON 세 형식으로 볼 수 있고, 용도에 따라 골라 쓰면 됩니다.
붙여넣기만 하면 즉시 표·URL 목록·JSON으로 변환됩니다. 설치나 가입 없이 브라우저에서 바로 처리됩니다.
자주 묻는 질문
참조 스타일 링크([text][ref])도 추출되나요?
아니요. 이 도구는 인라인 마크다운 링크 [텍스트](URL) 형식과 이미지  형식만 집중적으로 파싱합니다. 참조 스타일 링크는 대괄호 쌍이 연속되고 소괄호가 없는 별도 문법이라 이 패턴에 걸리지 않습니다.
이미지 링크가 결과에 안 보이는데 왜 그런가요?
'이미지 포함' 체크박스 기본값이 꺼짐(false)이기 때문입니다. 체크박스를 켜야  형태로 작성된 이미지 매치가 결과와 통계에 함께 표시됩니다.
추출된 URL을 바로 클릭해서 열어볼 수 있나요?
표 형식으로 볼 때는 가능합니다. 표에 나열되는 URL 주소는 클릭 가능한 하이퍼링크로 표시되어, 새 창에서 바로 열어 주소가 살아 있는지 확인할 수 있습니다.
JSON 형식으로 출력하면 어떤 값이 나오나요?
추출된 링크마다 {text, url, isImage} 형태의 객체가 배열로 나옵니다. text는 대괄호 안 텍스트, url은 소괄호 안 주소(trim만 적용, 별도 유효성 검사 없음), isImage는 느낌표가 붙은 이미지 링크인지 여부를 나타냅니다.
