어 그래 (정)규식이 왔나?

donggae·2023년 10월 31일
0

JavaScript

목록 보기
7/7
post-thumbnail

요즘 주말에 코딩테스트 문제 풀면서 공부를 하고 있는데 정규식에 관한 문제에 많이 부족한 것 같아서
정리 하면서 공부하면 좋을 것 같아서 적게 되었다.

가장 먼저 정규 표헌식이 무엇일까부터 알아보자

정규 표현식이란?

문자열을 대상으로 패턴 매칭 기능을 제공한다.
패턴 매칭 기능 - 특정 패턴과 일치하는 문자열을 검색하거나 추출 또는 치환할 수 있는 기능

내가 문제를 풀면서 해당 문자열에서 특정 문자를 다른 문자로 치환하는 문제를
반복문과 조건문을 통해서 풀었는데 정규 표현식으로 풀면 되게 쉽고 알면 좋을 것 같다는 생각이 들었다.

정규 표현식을 만들어보자

정규 표현식은 패턴과 플래그를 가지고 있다.
/패턴(pattern)/플래그(flag)

예제로 알아보자

const target = "Is this yours?";

const regexp = /is/i;

regexp.test(target) // true

test메서드는 target 문자열에 대하여 정규 표헌식 regexp의 패턴을 검색하여 불리언 값으로 반환

그럼 메서드와 플래그에 대해서 알아보자

정규 표현식에서의 메서드

1. 패턴 검사 test()

패턴 검사에서는 크게 두가지로 나뉜다.

  • 단일 패턴
const regExp = new RegExp("a");
console.log(regExp.test("abc")); // true

test 메서드를 통하여 해당 문자열에서 "a"가 포함되어 있는지에 대해 검사한다.

  • 복합 패턴
const regExp = new RegExp("ab | cd");
console.log(regExp.test("abc")); // true
console.log(regExp.test("cde")); // true
const regExp = /ab.*cd/;
console.log(regExp.test("abc")); // false
console.log(regExp.test("abcd")); // true
console.log(regExp.test("cde")); // false

정규 표현식에서 |는 or을 나타내고, .*는 and를 나타낸다.

2. 문자열 검색 exec()

const regExp = new RegExp("a");
const str = "abc";
const result = regExp.exec(str);
console.log(result); // ["a", 0, 1]

str 문자열에서 "a"가 포함되어 있는지 있으면 다음과 같은 결과를 반환한다.

  • "a" - 정규 표현식 /a/와 일치한다.
  • 0 - 문자열 "a"가 idx 0 에서 시작한다.
  • 1 - 문자열 "a"가 idx 1 에서 끝이난다.

str에서 idx 0에서 1까지 일치한다는 것

3. 문자열 치환 replace()

const regExp = new RegExp("a", "b");
const str = "abc";
const result = regExp.replace(str, "b");
console.log(result); // "bbc"
  • "a"는 찾을 대상 문자열
  • "b"는 대체할 문자열
  • str 문자열에서 "a"가 포함되어 있으면 "a" -> "b"로 대체되어 반환한다.

4. 문자열 분할 split()

const regExp = new RegExp(",");
const str = "a,b,c";
const result = regExp.split(str);
console.log(result); // ["a", "b", "c"]
  • 정규 표현식으로 해당 문자열에서 ,를 찾는다.
  • ,를 기준으로 분할을 한다.
  • split 을 통하여 배열로 반환 된다.

정규 표현식에서의 플래그

플래그의미설명
iIgnore case대소문자를 구별하지 않고 패턴을 검색한다.
gGloval대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색한다.
mMulti line문자열의 행이 바뀌더라도 패턴 검색을 계속한다.

정규 표현식을 통한 문제 풀이

  1. 알파벳으로 이루어진 문자열 myString과 pat이 주어집니다. myString의 연속된 부분 문자열 중 pat이 존재하면 1을 그렇지 않으면 0을 return 하는 solution 함수를 완성해 주세요.
function solution(myString, pat) {
	const regExp = new RegExp(pat, 'i');
	return regExp.test(myString) ? 1 : 0;
}
  1. 문자열 myString이 주어집니다. "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요.
    단, 빈 문자열은 반환할 배열에 넣지 않습니다.
function solution(myString) {
	let answer = [];
  	answer = myString.split('x').filter(Boolean);
  	return answer.sort();
}

filter(Boolean)을 사용하면 해당 분자가 빈 문자이면 포함하지 않는다.

  1. 문자열 배열 strArr가 주어집니다. 배열 내의 문자열 중 "ad"라는 부분 문자열을 포함하고 있는 모든 문자열을 제거하고 남은 문자열을 순서를 유지하여 배열로 return 하는 solution 함수를 완성해 주세요.
function solution(strArr) {
	var answer = [];
	const regExp = /.*ad.*/;
	for (let i = 0; i < strArr.length; i++) {
		if (!regExp.test(strArr[i])) {
			answer.push(strArr[i]);
		}
	}

	return answer;
}

/.*STR.*/ 을 사용하게 되면 해당 문자열에서 STR이 포함되어 있는지에 대한 검사를 한다.

profile
아자자자

0개의 댓글