손에 잡히는 정규표현식 - ChoDragon9/posts GitHub Wiki
역참조는 정규 표현식 패턴으로, 앞서 일치한 부분을 다시 가리킵니다.
시작태그와 종료태그를 찾을 때 역참조를 사용하면 유용합니다.
`<body>
<h1>Welcome to my Website</h1>
<h2>ColdFusion</h1>
<H3>Wireless</h3>
</body>`.match(/<[hH][1-6]>.*?<\/[hH][1-6]>/g);
시작태그와 종료태그가 다른이름인데도 일치되어 검색되었습니다. 하지만 종료태그가 다른 태그를 찾는 것은 의도와 다를 것입니다.
[
"<h1>Welcome to my Website</h1>",
"<h2>ColdFusion</h1>",
"<H3>Wireless</h3>"
]
역참조를 사용하면 하위표현식에 일치한 부분을 찾아 사용할 수 있습니다.
`
<body>
<h1>Welcome to my Website</h1>
<h2>ColdFusion</h1>
<H3>Wireless</h3>
</body>
`.match(/<([hH][1-6])>.*?<\/\1>/g);
// ["<h1>Welcome to my Website</h1>"]
치환을 할 때도 역참조를 사용할 수 있습니다.
`Hello, [email protected] is my email address.`
.replace(/(\w+\@\w+\.\w+)/, '<a href="mailto:$1">$1</a>')
// "Hello, <a href="mailto:[email protected]">[email protected]</a> is my email address."
모든 매칭: $&
전방탐색(lookahead) 패턴은 일치 영역을 발견해도 그 값을 반환하지 않는 패턴을 말합니다. 전방탐색은 실제로는 하위 표현식이며, 하위 표현식과 같은 형식으로 작성합니다. 전방탐색 패턴의 구문은 ?=로 시작하고 등호(=) 다음에 일치할 텍스트가 오는 하위 표현식힙니다.
`
http://www.google.com
https://www.naver.com
ftp://file.net
`.match(/.+(?=:)/g)
// ['http', 'https', 'ftp']
후방탐색(lookbehind) 패턴의 구문은 ?<=로 시작하고 등호(=) 다음에 일치할 텍스트가 오는 하위 표현식입니다.
`
Apple : $3.45
Orange : $2.63
Banana : $6.33
`.match(/(?<=\$)[0-9.]+/g)
// ["3.45", "2.63", "6.33"]
`<body>
<h1>Welcome to my Website</h1>
<h2>ColdFusion</h2>
<h3>Wireless</h3>
</body>`.match(/(?<=\<h1\>).*?(?=\<\/h1\>)/g);
// ["Welcome to my Website"]