TIL 20230527(정규표현식)

·2023년 5월 28일
0

Elice AI트랙 8기

목록 보기
10/28

개념정리가 조금 부족한 것 같아 추가

정규표현식

문자열에서 특정한 문자를 찾아내는 도구. 자바스크립트 이외에 자바,perl 등에서도 사용된다. 하나의 언어로 볼 수 있다.

컴파일: 작업을 하기 위해 필요한 패턴을 찾는 것.

정규표현식 리터럴

var pattern=/a/; // a는 찾고자 하는 문자
//pattern은 정규표현식 객체

정규표현식 객체 생성자

var pattern=new RegExp('a');

/a/와 new RegExp 모두 정규표현식 객체로, pattern에 저장된 상태이다.

정규표현식 메소드
찾고자 하는 문자열 정보 추출(exec)
해당되는 문자열이 있는지 없는지 확인(test)
찾아낸 정보를 다른 것으로 치환(?)

var pattern =/a/;
pattern.exec('abcde');
//['a',index:0......]

var pattern=/a./;
pattern.exec('abcde');
//['ab',index:0.......]

var pattern=/a/;
pattern.exec('bcdef');
//null

RegExp.exec(인자)
RegExp라는 객체에 저장된 문자열이 인자 안에 있다면, 추출할 수 있다.
두번째 코드의 /a./에서 .은 문자를 의미한다. exec을 실행하면 a뒤에 있는 문자인 b가 함께 출력된다.
세번째 코드에서 'bcdef'에는 a가 없으므로 null값이 출력된다.

var pattern=/a/;
pattern.test('asdf'); //true
pattern.test('qwert'); //false

Reg.test(인자)
인자 안에 문자열이 있는지 없는지를 확인할 수 있다.

문자열 메소드
문자열 객체의 몇몇 메소드에는 정규 표현식을 사용할 수 있다.

var pattern=/a/;
'abcde'.match(pattern); //['a']; 배열로 리턴

var str='qwerty';
str.match(pattern); //null;

Str.match(인자)
Str 안에 인자로 받은 정규표현식 객체 문자열이 있는지 확인할 수 있다.

var pattern='a';
var str='asdf';
str.replace(pattern,'A'); //'Asdf'

Str.replace( )
문자열에서 패턴을 찾은 후, 이를 변경한 뒤에 변경된 값을 리턴한다.

정규표현식의 옵션

var xi = /a/;
'Abcde'.match(xi); //null

var x=/a/i;
'Abcde'.match(x);

i
대소문자를 구분하지 않는다는 의미. /a/i;는 a와 A모두 찾아준다.

var xg = /a/;
"abcdea".match(xg); //['a'];

var og = /a/g;
"abcdea".match(og); //['a','a'];

g
g를 붙이면 같은 패턴이 여러개 있을 경우, 검색된 모든 결과를 리턴한다.

var x=/a/ig;
'ABCDE abcde ABCDE'.match(x);
//['A','a','A'];

옵션을 한번에 두 개 사용하려면 문자열 뒤에 바로 연결해주면 된다.

캡쳐

var pattern = /(\w+)\s(\w+)/;

( ) : 정규표현식에서 그룹을 의미한다.
\w : 문자(A~Z,a~z,0~9)를 의미
'+' : 앞에 있는 문자가 하나 이상일 때 사용한다.
(#,+,-등의 기호는 문자가 아니다.)
\s는 공백을 의미한다.

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

var wstr='PenPineAppleApplePen';
console.log(wstr.replace(pattern,'$2, $1'));
//

result변수에 $2는 두번째 그룹, $1은 첫번째 그룹을 의미한다.
앞에서는 replace 메서드를 이용해 str에 pattern을 찾아 그 값을 'A'로 변경했다. 여기서도 str('coding everybody')에서 (문자) 공백 (문자)의 패턴을 찾아 그 값을 (두번째 그룹, 공백 첫번째그룹)으로 변경한 것이다.

이처럼 그룹을 지정하고, 지정한 그룹을 불러와 사용하는 것을 캡쳐라 한다.

치환

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);
//생활코딩 : <a href="http://opentutorials.org/course/1">http://opentutorials.org/course/1</a> 입니다.
//네이버 : <a href="http://naver.com">http://naver.com</a> 입니다. 

urlPattern에 찾을 패턴을 저장한다.
var result에 인자로 받은 function(url){}은 url을 찾을 때마다 호출되고, url은 function에 인자로 전달된다.

profile
개발이 죠은 죠의 기묘한 개발일지

0개의 댓글