개념정리가 조금 부족한 것 같아 추가
컴파일: 작업을 하기 위해 필요한 패턴을 찾는 것.
정규표현식 리터럴
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에 인자로 전달된다.