Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- data
- binding
- intent
- Kotlin
- Flutter
- 테스트
- 계측
- Coroutines
- scroll
- drift
- appbar
- viewmodel
- 앱바
- 안드로이드
- CustomScrollView
- textview
- Dialog
- LifeCycle
- activity
- tabbar
- ScrollView
- livedata
- Button
- android
- textfield
- TEST
- DART
- Navigation
- Compose
- 앱
Archives
- Today
- Total
Study Record
[JavaScript] 정규 표현으로 문자 조작하기 - RegExp 객체 본문
728x90
정규표현으로 문자 조작하기
정규표현으로 나타낸 문자열 패턴을 정규 표현 패턴이라고 한다.
㉮ 기본 패턴
패턴 | 매칭하는 문자열 |
ABC | 문자열 'ABC' |
[ABCD] | A, B, C, D 중 한 개의 문자 |
[^ABCD] | A, B, C, D 이외의 한 개의 문자 |
[A-Z] | A~Z 사이의 한 문자 |
A|B|C | A, B, C 중 어떤 것 |
㉯ 수량 지정
패턴 | 매칭하는 문자열 |
X* | X 가 0개 이상이어야 함 (ex. 'ffe*' 일 경우 'ff' , 'ffe', 'ffe' 등으로 매칭 가능) |
X? | X 가 0개 또는 1개여야 함 (ex. 'avb?' 일 경우 'avb' 'av' 매칭 가능) |
X+ | X 가 1개 이상이여야 함 (ex. 'ffe+' 일 경우 'ffe', 'ffeee' 등으로 매칭 가능) |
X{n} | X 가 n 개 있어야 함 (ex. 'ab{3}' 일 경우 'abbb') |
X{n,} | X 가 n 개 이상 있어야 함 (ex. '[0-9]{3,}' 일 경우 3자리 이상의 숫자) |
X{m,n} | X 가 m~n 개 있어야 함 (ex. '[0-9]{3,5}' 일 경우 3~5자리의 숫자) |
㉰ 위치 지정
패턴 | 의미 |
^ | 문자열의 시작을 의미한다. (ex. '^http' 일 경우 http 로 시작하는 문자열만 가능) |
$ | 문자열의 끝을 의미한다. (ex. '$temp' 일 경우 끝이 temp 로 끝나는 문자열이여야 한다.) |
㉱ 문자 세트
패턴 | 의미 |
. | 임의의 1문자 |
\w | 대문자와 소문자의 영숫자, 숫자, _에 일치한다. ('[A-Za-Z0-9]' 와 동일) |
\W | 문자 이외의 것과 일치('[^\w]' 와 동일) |
\d | 모든 숫자를 매칭('[0`9]' 와 동일) |
\D | 숫자 이외의 것과 매칭('[^0-9]'와 동일) |
\n | 개행과 일치 |
\r | 복귀와 일치 |
\t | 탭 문자와 일치 |
\s | 공백 문자와 일치(\r, \n, \t, \v, \f 와 동일) |
\S | 공백 이외의 문자와 일치('[^s]' 와 동일) |
\~ | '~' 로 표현되는 문자 |
RegExp 객체 생성하기
RegExp 객체를 생성하는 방법은 2가지이다. 정규 표현의 주요 옵션들이 있는데 옵션은 다음과 같다.
- g : 문자열 전체에 대해 매치하는가(지정하지 않은 경우 1번 매칭한 시점에서 처리 종료)
- i : 대문자/소문자를 구별하는가
- m : 복수행에 대응하는가(개행 코드를 행의 시작과 끝으로 인식한다.)
- U : 유니 코드에 대응한다.
1. RegExp 객체의 생성자를 경유하는 방법
var 변수명 = new RegExp('정규 표현', '옵션');
// ex)
var p = new RegExp('http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?', 'gi');
2. 정규 표현 리터럴 이용하기
var 변수명 = /정규표현/옵션;
// ex)
var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?/gi;
정규 표현 사용해보기 - String.match
정규 표현으로 검색하려면 String.match 메소드를 이용한다.
var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?/gi;
var str = "사이트 : https://www.naver.com 혹은 http://www.daum.net/";
var result = str.match(p);
for(let i = 0; i < result.length; i++) {
console.log(result[i]);
}
/* 결과
https://www.naver.com
http://www.daum.net/
*/
match 메소드와 exec 메소드
match 메소드는 g 옵션과 사용했을 때 전체를 매칭한다. 하지만 exec 메소드는 g 옵션과 상관없이 한 번의 실행에 하나의 실행 결과만을 돌려준다.
var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?/gi;
var str = "사이트 : https://www.naver.com 혹은 http://www.daum.net/";
var result = p.exec(str);
for(let i = 0; i < result.length; i++) {
console.log(result[i]);
}
/* 결과, 문자열 전체와 서브 매치 문자열로 반환한다.
https://www.naver.com
s
naver.
undefined
*/
exec 메소드로 match 메소드를 사용했을 때 글로벌 검색과 같은 결과를 내려면 다음과 같다. exec 메소드는 마지막에 매치한 문자의 위치를 기억하는 기능을 가지고 있어서 다음 번의 exec 메소드를 실행할 때 RegExp 객체는 이전의 매치 위치로부터 검색을 재개한다. exec 메소드는 검색 결과가 없으면 null 을 반환한다.
var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?/gi;
var str = "사이트 : https://www.naver.com 혹은 http://www.daum.net/";
var result;
while(result = p.exec(str)) {
console.log(result[0]);
}
/* 결과
https://www.naver.com
http://www.daum.net/
*/
매칭의 성공 여부 검증하기
㉮ test 메소드
test 메소드로 true/false 로 간단하게 매칭 성공 여부를 알 수 있다.
var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?/gi;
var str = "사이트 : https://www.naver.com 혹은 http://www.daum.net/";
console.log(p.test(str));
㉯ search 메소드
search 메소드는 처음 매치한 문자의 위치를 돌려주는 메소드로 매칭 문자열이 존재하지 않는 경우에 반환값으로 -1을 반환한다.
var p = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?/gi;
var str = "사이트 : https://www.naver.com 혹은 http://www.daum.net/";
console.log(str.search(p)); // 6
정규 표현으로 문자열 치환하기
String.replace 메소드를 이용하면 정규 표현에 매치한 문자열을 치환할 수 있다.
var p = /[0-9]{3}/gi;
var str = '핸드폰 번호 앞자리는 003 입니다.';
console.log(str.replace(p, '++$1++')); // 핸드폰 번호 앞자리는 ++$1++ 입니다.
정규 표현으로 문자열 분할하기
String.split 메소드를 이용하면 문자열을 분할할 수 있다.
// /, -, . 세 문자 중 하나를 포함하면 매칭된다.
var p = /[\/\.\-]/gi;
let str = "2016-10-11";
console.log(str.match(p)); // [ '-', '-' ]
console.log(str.split(p)); // [ '2016', '10', '11' ]
728x90
'웹 > Javascript' 카테고리의 다른 글
[JavaScript] 함수 기초 (1) | 2025.03.14 |
---|---|
[JavaScript] 모든 객체의 모형 Object 객체와 Global 객체 (1) | 2025.03.13 |
[JavaScript] 날짜와 시간 데이터 조작하기 - Date 객체 (1) | 2025.03.13 |
[JavaScript] 값의 집합 처리/조작하기 - Map, Set (1) | 2025.03.11 |
[JavaScript] 값의 집합 처리/조작하기 - Array (1) | 2025.03.11 |