μƒˆμ†Œμ‹

Languages/Java Script

[Js] μ •κ·œ ν‘œν˜„μ‹ | 컴파일? | μ •κ·œν‘œν˜„μ‹ λ¦¬ν„°λŸ΄

  • -
λ°˜μ‘ν˜•

ν•΄λ‹Ή ν¬μŠ€νŒ…μ€ "μƒν™œμ½”λ”©"의 μ΄κ³ μž‰ λ‹˜μ˜ κ°•μ˜λ₯Ό 기반으둜 올린 κ²Œμ‹œκΈ€ μž…λ‹ˆλ‹€.

상업적인 μš©λ„κ°€ μ•„λ‹Œ, 개인 곡뢀 정리 λͺ©μ μœΌλ‘œ μ˜¬λ¦¬λŠ” κΈ€μž„μ„ 미리 μ•Œλ¦½λ‹ˆλ‹€.

 

 

 


μ •κ·œν‘œν˜„μ‹ 

μ •κ·œν‘œν˜„μ‹(regular expression)은 λ¬Έμžμ—΄μ—μ„œ νŠΉμ •ν•œ 문자λ₯Ό μ°Ύμ•„λ‚΄λŠ” 도ꡬ닀.

이 도ꡬλ₯Ό μ΄μš©ν•˜λ©΄ μˆ˜μ‹­μ€„μ΄ ν•„μš”ν•œ μž‘μ—…μ„ ν•œμ€„λ‘œ 끝낼 수 μžˆλ‹€. 

 

μ •κ·œν‘œν˜„μ‹μ€ ν•˜λ‚˜μ˜ 언어라고 ν•  수 μžˆλ‹€.

κ·ΈλŸ¬λ―€λ‘œ λ³Έ μˆ˜μ—…μ—μ„œ μ •κ·œν‘œν˜„μ‹μ˜ λͺ¨λ“  것을 λ‹€λ£¨λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€.

 

λ³Έ μˆ˜μ—…μ€ μ•„λž˜μ™€ 같은 μ „λž΅μ„ μ·¨ν•˜κ³  μžˆλ‹€.

 

  1. μž…λ¬Έμžμ—κ²Œ μ •κ·œν‘œν˜„μ‹μ΄ 무엇인가에 λŒ€ν•œ κ°œλ…μ„ μ•Œλ €μ€€λ‹€. μ΄ˆμ‹¬μžμ—κ²ŒλŠ” μ‚¬μš©λ²•κΉŒμ§€ κ³΅λΆ€ν•˜λŠ” 것은 무리닀. λ‚˜μ€‘μ— 문자λ₯Ό μ²˜λ¦¬ν•΄μ•Όν•˜λŠ” 상황이 생겼을 λ•Œ 이곳을 μ°Ύμ•„μ˜€κ±°λ‚˜ λ³Έ μˆ˜μ—…μ„ μ™„μ£Όν–ˆμ„ λ•Œ λ§ˆμ§€λ§‰ λ‹¨κ³„λ‘œ λ³Έ μˆ˜μ—…μ„ κ³΅λΆ€ν•œλ‹€.
  2. μ •κ·œν‘œν˜„μ‹μ„ 이미 μ•Œκ³  μžˆλŠ” κ°œλ°œμžμ—κ²ŒλŠ” μ •κ·œν‘œν˜„μ‹μ„ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λŠ”κ°€λ₯Ό μ•Œλ €μ€€λ‹€. 
  3. μ •κ·œν‘œν˜„μ‹ μžμ²΄μ— λŒ€ν•œ ν•™μŠ΅μ΄ ν•„μš”ν•˜λ‹€λ©΄ μ •κ·œν‘œν˜„식 μˆ˜μ—…μ„ κ³΅λΆ€ν•˜μž.

 

 

μ •κ·œν‘œν˜„μ‹ 생성

μ •κ·œν‘œν˜„μ‹μ€ 두가지 λ‹¨κ³„λ‘œ 이루어진닀.

ν•˜λ‚˜λŠ” 컴파일(compile) λ‹€λ₯Έ ν•˜λ‚˜λŠ” μ‹€ν–‰(execution)이닀. μš°μ„  μ»΄νŒŒμΌλΆ€ν„° μ•Œμ•„λ³΄μž.

 

 

컴파일

μ»΄νŒŒμΌμ€ κ²€μΆœν•˜κ³ μž ν•˜λŠ” νŒ¨ν„΄μ„ λ§Œλ“œλŠ” 일이닀.

μš°μ„  μ •κ·œν‘œν˜„μ‹ 객체λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. 객체λ₯Ό λ§Œλ“œλŠ” 방법은 두가지가 μžˆλ‹€.

aλΌλŠ” ν…μŠ€νŠΈλ₯Ό μ°Ύμ•„λ‚΄λŠ” μ •κ·œν‘œν˜„μ‹μ„ λ§Œλ“€μ–΄λ³΄μž.

 

 

μ •κ·œν‘œν˜„μ‹ λ¦¬ν„°λŸ΄

<script>
	var pattern = /a/
</script>

μŠ¬λž˜μ‹œμ™€ μŠ¬λž˜μ‹œ 사이 aκ°€ μš°λ¦¬κ°€ 찾고자 ν•˜λŠ” λŒ€μƒμ΄λΌλŠ” 것을 μ•Œλ €μ£ΌλŠ” 것이닀.

이것을 patternμ΄λΌλŠ” λ³€μˆ˜μ— λ‹΄μŒμœΌλ‘œμ¨, μš°λ¦¬κ°€ μ°Ύκ³  싢은 λ‚΄μš©μ„ 찾을 수 μžˆλŠ” 것이닀.

 

μ •κ·œν‘œν˜„μ‹ 객체 μƒμ„±μž

<script>
	var pattern = new RegExp('a');
</script>

new둜 μ •κ·œν‘œν˜„μ‹ 객체λ₯Ό λ§Œλ“€μ–΄ μ£ΌλŠ” 것이고 'a'λΌλŠ” 문자λ₯Ό μ°ΎλŠ”λ‹€λŠ” 것을 μ•Œλ €μ£ΌλŠ” 것이닀.

두가지 λͺ¨λ‘ 같은 κ²°κ³Όλ₯Ό λ§Œλ“€μ§€λ§Œ κ°μžκ°€ μž₯단점이 μžˆλ‹€. 

 

 

μœ„μ˜ λ‚΄μš©μ€ μ •κ·œν‘œν˜„μ‹μ˜ μ•„μ£Ό μž‘μ€ μ‘°μž‘(μ‚¬μš©)법이기 λ•Œλ¬Έμ— 

μ‹€μ œ μ•ˆμ— λ“€μ–΄κ°€λŠ” λ‚΄μš©μ„ μ •κ·œν‘œν˜„μ‹μ— 문법에 맞게 μžμ‹ μ΄ ν•„μš”ν•œ 것을 μ°Ύμ•„λ‚΄λŠ” μ‹€μŠ΅μ„ ν•΄λ³΄μž.

 

μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” μΆ”μΆœ, test, μΉ˜ν™˜ λ“±μ˜ μžˆμ„ 것이닀.

λ¨Όμ € 첫번째 방법을 μ‚΄νŽ΄λ³΄μž.

 

 

μ •κ·œν‘œν˜„μ‹ λ©”μ†Œλ“œ μ‹€ν–‰

μ •κ·œν‘œν˜„μ‹μ„ μ»΄νŒŒμΌν•΄μ„œ 객체λ₯Ό λ§Œλ“€μ—ˆλ‹€λ©΄ 이제 λ¬Έμžμ—΄μ—μ„œ μ›ν•˜λŠ” 문자λ₯Ό μ°Ύμ•„λ‚΄μ•Ό ν•œλ‹€.

 

RegExp.exec() (exec : μ‹€ν–‰μ˜ μ•½μž)

<script>
	console.log(pattern.exec('abcdef')); // ["a"]
</script>

μ‹€ν–‰κ²°κ³ΌλŠ” λ¬Έμžμ—΄ aλ₯Ό κ°’μœΌλ‘œ ν•˜λŠ” 배열을 λ¦¬ν„΄ν•œλ‹€.

 

 

 

execλŠ” 싀행을 μ˜λ―Έν•œλ‹€.

였λ₯Έμͺ½μ˜ 경우 . 이 μ˜λ―Έν•˜λŠ” 것은 μ–΄λ– ν•œ 문자던, 1개의 문자λ₯Ό μ˜λ―Έν•˜κΈ° λ•Œλ¬Έμ— 2κ°œκ°€ 좜λ ₯λœλ‹€.

 

 

μ•„λž˜μ™€ 같이 νŒ¨ν„΄μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”κ²½μš°!

<script>
	console.log(pattern.exec('bcdefg')); // null
</script>

인자 'bcdef'μ—λŠ” aκ°€ μ—†κΈ° λ•Œλ¬Έμ— null을 λ¦¬ν„΄ν•œλ‹€.

 

RegExp.test()

testλŠ” 인자 μ•ˆμ— νŒ¨ν„΄μ— ν•΄λ‹Ήλ˜λŠ” λ¬Έμžμ—΄μ΄ 있으면 true, μ—†μœΌλ©΄ falseλ₯Ό λ¦¬ν„΄ν•œλ‹€.

<script>
    console.log(pattern.test('abcdef')); // true
    console.log(pattern.test('bcdefg')); // false
</script>

 

 

즉 exec()λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 보톡 μΆ”μΆœμ˜ 경우이고, testλ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°λŠ” μš°λ¦¬κ°€ μ°ΎλŠ” 정보가

μžˆλŠ”μ§€ μ—†λŠ”μ§€ 쑴재 유무λ₯Ό testν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©μ„ ν•˜λŠ” 것이닀.

 

각 μš©λ„μ— 맞게 ν•¨μˆ˜λ₯Ό 잘 μ΄μš©ν•˜λŠ” 것 λ˜ν•œ μ€‘μš”ν•˜λ‹€. 

 

 

λ¬Έμžμ—΄ λ©”μ†Œλ“œ μ‹€ν–‰

 

λ¬Έμžμ—΄ 객체의 λͺ‡λͺ‡ λ©”μ†Œλ“œλŠ” μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

 

String.match()

RegExp.exec()와 λΉ„μŠ·ν•˜λ‹€. 즉 νŒ¨ν„΄μ„ μ°Ύμ•„μ£Όκ³  μžˆλ‹€λ©΄ μΆ”μΆœ ν•΄μ£ΌλŠ” 것이닀.

<script>
    console.log('abcdef'.match(pattern)); // ["a"]
    console.log('bcdefg'.match(pattern)); // null
</script>

 

String.replace()

λ¬Έμžμ—΄μ—μ„œ νŒ¨ν„΄μ„ κ²€μƒ‰ν•΄μ„œ 이λ₯Ό λ³€κ²½ν•œ 후에 λ³€κ²½λœ 값을 λ¦¬ν„΄ν•œλ‹€.

<script>
    console.log('abcdef'.replace(pattern, 'A'));  // Abcdef
</script>

 

μ˜΅μ…˜

 μ •κ·œν‘œν˜„식 νŒ¨ν„΄μ„ λ§Œλ“€ λ•Œ μ˜΅μ…˜μ„ μ„€μ •ν•  수 μžˆλ‹€. μ˜΅μ…˜μ— λ”°λΌμ„œ κ²€μΆœλ˜λŠ” 데이터가 달라진닀.

 

i μ˜΅μ…˜

iλ₯Ό 뢙이면 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•ŠλŠ”λ‹€.

<script>
    var xi = /a/;
    console.log("Abcde".match(xi)); // null
    var oi = /a/i;
    console.log("Abcde".match(oi)); // ["A"];
</script>

 

g μ˜΅μ…˜

gλ₯Ό 뢙이면 κ²€μƒ‰λœ λͺ¨λ“  κ²°κ³Όλ₯Ό λ¦¬ν„΄ν•œλ‹€.

<script>
    var xg = /a/;
    console.log("abcdea".match(xg)); //ν•œλ²ˆλ§Œ aκ°€ 찾아진닀.
    var og = /a/g;
    console.log("abcdea".match(og)); // a의 갯수만큼 좜λ ₯λœλ‹€.
</script>

 

같이 μ‚¬μš©ν•œλ‹€λ©΄, 무언가λ₯Ό 찾을 λ•Œ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λ³„ν•˜μ§€ μ•Šκ³  λ¬Έμžμ—΄λ‚΄μ— λͺ¨λ“  값을 μ°Ύμ•„λ‚Έλ‹€λŠ” λœ»μ΄λ‹€.

 

캑처

κ΄„ν˜Έμ•ˆμ˜ νŒ¨ν„΄μ€ 마치 λ³€μˆ˜μ²˜λŸΌ μž¬μ‚¬μš©ν•  수 μžˆλ‹€.

이 λ•Œ 기호 $λ₯Ό μ‚¬μš©ν•˜λŠ”λ° μ•„λž˜ μ½”λ“œλŠ” codingκ³Ό everybody의 μˆœμ„œλ₯Ό μ—­μ „μ‹œν‚¨λ‹€.

 

<script>
    var pattern = /(\w+)\s(\w+)/;
    var str = "coding everybody";
    var result = str.replace(pattern, "$2, $1");
    console.log(result);
</script>

 

wλŠ” 문자λ₯Ό μ˜λ―Έν•˜λ©°, a-zA-Z0-9λ₯Ό μ˜λ―Έν•œλ‹€.

+ λŠ” μˆ˜λŸ‰μž : μ•žμ— μžˆλŠ” νŒ¨ν„΄μ΄ 1개 이상인 경우 ν•΄λ‹Ήν•œλ‹€.(ex: # = x(νŒ¨ν„΄μ— μ—†λŠ” 경우), a  = ok)

s λŠ” 슀페이슀 : 곡백이 μžˆλ‹€λ©΄ μ•žμ— 뢀뢄쑰건을 λ§Œμ‘±μ‹œν‚¨λ‹€.

 

즉, μœ„μ˜ μ½”λ“œμ˜ μ‹€ν–‰κ²°κ³ΌλŠ” everybody, coding으둜 λ‚˜μ˜¨λ‹€.

μ΄μœ λŠ” resultλΌλŠ” λ³€μˆ˜μ— strλ³€μˆ˜ λ‚΄μš©μ„ μ €μž₯ν•˜μ˜€λŠ”λ°, 이λ₯Ό νŒ¨ν„΄μœΌλ‘œ λ‚˜λˆ„μ–΄ μ €μž₯ν•˜μ˜€κ³ 

$λŠ” νŠΉμˆ˜ν•œ 의미λ₯Ό κ°€μ§€λŠ”λ°, $2λ₯Ό ν•˜λ©΄ λ¬Έμž₯νŒ¨ν„΄μ€‘ λ‘λ²ˆμ§Έ κ΄„ν˜Έ(μœ„ μ½”λ“œμ—μ„  '\w+'λ₯Ό 의미) λ₯Ό λœ»ν•˜κ³ ,

replaceλŠ” μΉ˜ν™˜μ„ ν•΄μ£ΌλŠ” ν•¨μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€.

 

뢄석해보면 pattern, " " 즉 ν°λ”°μ˜΄ν‘œ μ•ˆμ— λ“€μ–΄κ°€λŠ” λ‚΄μš©μ΄ strμ΄λΌλŠ” 문자λ₯Ό μ–΄λ–»κ²Œ μΉ˜ν™˜ν•  것인지λ₯Ό κΈ°μž¬ν•˜λŠ” 것인데,

이 뢀뢄에 $2, $1κ³Ό 같은 ν˜•νƒœλ‘œ μΉ˜ν™˜μ„ ν•œλ‹€κ³  ν•˜μ˜€μœΌλ‹ˆ $2 즉 everybodyκ°€ 좜λ ₯되고 ,(콀마)λ₯Ό 찍게 된 ν›„

λ§ˆμ§€λ§‰μœΌλ‘œ $1 즉 codingμ΄λΌλŠ” 문자λ₯Ό 좜λ ₯ν•˜κ²Œ ν•΄μ£ΌλŠ” 것이닀.

결과적으둜 everybody, coding이 좜λ ₯λœλ‹€.

 

 

μœ„μ™€ 같이 μ •κ·œμ‹μ„ μ‹œκ°ν™”ν•˜μ—¬ 확인해볼 μˆ˜λ„ μžˆλ‹€.

 

 

μ•„λž˜ μ£Όμ†Œλ₯Ό μ°Έκ³ ν•΄μ„œ μ •κ·œν‘œν˜„μ‹μ„ μ‹€μŠ΅ν•΄λ³΄μž!

lucete1230-cyberpolice.tistory.com/44

 

[ν¬λ Œμ‹] μ •κ·œν‘œν˜„μ‹

μ˜€λŠ˜μ€ μ–΄λ””μ—μ„œλ‚˜ 자주 μ“°μ΄λŠ” "μ •κ·œν‘œν˜„μ‹"에 λŒ€ν•΄ μ•Œμ•„λ³΄κ³  κ°„λ‹¨ν•œ μ‹€μŠ΅μ„ ν•΄λ³Όκ»˜μš” μ •κ·œν‘œν˜„μ‹ νŠΉμ •ν•œ κ·œμΉ™μ„ 가진 λ¬Έμžμ—΄μ˜ 집합을 ν‘œν˜„ν•˜λŠ”λ° μ‚¬μš©ν•˜λŠ” ν˜•μ‹ μ–Έμ–΄ κ°œλ… (κ°œμš”) ↓↓ κΈ°λ³Έ

lucete1230-cyberpolice.tistory.com

 

μ΄λ ‡κ²Œ μœ„μ™€ 같이 그룹을 μ§€μ •ν•˜κ³ , μ§€μ •λœ 그룹을 κ°€μ Έμ™€μ„œ μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯(κ°œλ…)을 "캑처"라고 ν•œλ‹€.

 

 

μΉ˜ν™˜

μ•„λž˜ μ½”λ“œλŠ” λ³Έλ¬Έ μ€‘μ˜ URL을 링크 html νƒœκ·Έλ‘œ κ΅μ²΄ν•œλ‹€.

<script>
    var urlPattern = /\b(?:https?):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*/gim;
    var content = 'μƒν™œμ½”λ”© : http://opentutorials.org/course/1 μž…λ‹ˆλ‹€. 넀이버 : http://naver.com μž…λ‹ˆλ‹€. ';
    var result = content.replace(urlPattern, function(url){
        return '<a href="'+url+'">'+url+'</a>';
    });
    console.log(result);
</script>

κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™λ‹€.

 

 

 

μ°Έκ³ 

λ°˜μ‘ν˜•
Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.