[자바스크립트/javascript] 정규표현식

생활코딩의 정규표현식 강의를 보면서 작성.

코딩테스트 문제를 풀 때 정규표현식을 이용하면 간단히 풀 수 있는 문제들을 종종 만나서 간단하게 배우고 넘어가야겠다.

 

<정규표현식>

: 문자열에서 특정한 문자를 찾아내는 도구.

이 도구를 이용하면 수십 줄의 코드 -> 한 줄로 끝낼 수 있다.

정규표현식은 하나의 언어라고 할 수 있음.

정규표현식을 이용하여 추출, 테스트(확인하고자 하는 정보가 있는지 없는지), 치환 등의 작업을 한다.

 

 

 

 

-정규표현식 컴파일

컴파일은 검출하고자 하는 패턴을 만드는 일이다.

 

정규표현식 리터럴

var pattern = /a/;

 

정규표현식 객체 생성자

var pattern = new RegExp('a');

이러한 과정은 우리가 찾고자 하는 정보를 패턴화 하여 변수에 저장하는 과정.

 

 

 

 

-정규표현식 메소드 실행

 

RegExp.exec()

console.log(pattern.exec('abcdef'));
//['a']

문자 안에 a가 포함이 되어 있지 않다면 null값 반환

 

var pattern = /a./;
console.log(pattern.exec('abcdef'));
//['ab']

pattern 변수를 /a./으로 바꾸면 ['ab']가 반환된다.

위에서 "."은 하나의 문자라는 의미이다. "."이 어떠한 문자이건 상관없이 반드시 앞에 a가 있는 문자를 추출하는 것

 

 

RegExp.test()

console.log(pattern.test('abcdef'));
//true
console.log(pattern.test('bcdef'));
//false

해당 문자가 있나 없나 테스트하여 불린 값을 반환한다. 있으면 true, 없으면 false

 

 

 

 

-문자열 메소드 실행

정규표현식을 사용할 수 있는 문자열 객체 메서드

 

String.match()

RegExp()와 비슷

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

 

String.replace()

var str = 'abcdef';
str.replace(pattern,'A');
//"Abcdef"

 

 

 

 

-옵션

i : i를 붙이면 대소문자를 구별하지 않음

g : g를 붙이면 모든 결과를 리턴 (이전에 replace를 이용해 모든 문자를 한 번에 변경하고 싶을 때 사용했던 기억이 있다.)

두 개를 /a/ig처럼 같이 사용할 수도 있다.

 

 

 

 

-캡처

괄호 안의 패턴은 마치 변수처럼 재사용 가능. $기호를 사용

 

(\w+)\s(\w+)

:괄호는 그룹을 의미,

:\w는 문자를 의미(A~Z, a~z,0~9를 모두 담고 있음)

:+는 수량자(하나 이상이라는 표시)

:\s는 공백이란 의미(white_space)

var pattern = (\w+)\s(\w+)
var str = 'coding everybady';
var result = str.replace(pattern, '$2, $1');
console.log(result);
//everybody, coding

($n ->n번째 그룹을 의미)

coding -> 첫 번째 (\w+), $1가 된다

coding과 everybody 사이에 있는 공백 -> \s

everybody -> 두 번째 (\w+), $2가 된다

 

 

 

 

-치환

var urlPattern = /\b(?:https?):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*/gim;
var content = '공부기록 : https://practice-c0ding.tistory.com/ 입니다.';
var result = content.replace(urlPattern, function(url){
    return '<a href="'+url+'">'+url+'</a>';
});
console.log(result);
//공부기록 : <a href="https://practice-c0ding.tistory.com/">https://practice-c0ding.tistory.com/</a>입니다.

 

 

comment