정규 표현식이란?
패턴 매칭 기능이란 특정 패턴과 일치하는 문자열을 검색하거나 추출 or 치환할 수 있는 기능
const target = "Is this all there is?";
// 패턴: is
// 플래그: i => 대소문자를 구별하지 않고 검색한다.
const regexp = /is/i;
// test 메서드는 target 문자열에 대해 정규 표현식 regexp의 패턴을 검색하여 매칭한 결과를 불리언 값으로 반환한다.
regexp.test(target); // true
RegExp.prototype.exec
null
을 반환한다.const target = `Is this all there is?`;
cosnt regExp = /is/;
regExp.exec(target); // ["is", index: 5, nput: "Is this ....]
RegExp.prototype.test
const target = `Is this all there is?`;
cosnt regExp = /is/;
regExp.test(target); // true
RegExp.prototype.match
exec
와 비슷하나 exec
차이는 g플래그
를 지정하면 모든 매칭 결과를 배열로 반환할 수 있다.const target = `Is this all there is?`;
cosnt regExp = /is/;
target.match(regExp); //["is", index: 5,input: "Is this ....]
i: ignore 대소문자를 구별하지 않고 패턴을 검색한다.
g: Global 대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색한다.
m: Multi line 문자열의 행이 바뀌더라도 패턴 검색을 계속한다.
/
로 열고 닫으며 문자열의 따옴표는 생략한다.const target = `Is this all there is?`;
cosnt regExp = /is/ig;
// 플래그 i를 추가하여 대소문자를 구별하지 않고 검색
// 플래그 g를 추가하여 모든 문자열 전역 검색
target.match(regExp); // ["Is", "is", "is"]
const target = `Is this all there is?`;
cosnt regExp = /.../g;
target.match(regExp); // ["Is ", "thi", "s a", "ll ", "the", "re ", "is?"]
const target = `A AA B BB Aa Bb AAA`;
cosnt regExp = /A{1,2}/g;
// A가 최소 1번 최대 2번 반복되는 문자열을 전역 검색
target.match(regExp); // ["A", "AA", "A", "AA", A"]
const target = "A AA B BB Aa Bb";
const regExp = /A+|B+/g;
// A또는 B를 전역 검색
target.match(regExp); // ["A", "A", "A", "B", "B", "B", "A", "B"]
----------------------------------------------------
const target = `AA BB Aa Bb`;
cosnt regExp = /[A-Za-z]+/g;
// A~Z, a~z 가 1번 이상 반복되는 문자열을 전역 검색
target.match(regExp); // ["A", "BB", "Aa", "Bb"]
const url= 'https://example.com';
// [...]밖의 ^는 문자열의 시작을 의미
// | 는 or
// ? 는 앞선 패턴('s')가 0~1번 반복
/^https?:\/\//.test(url); // true
const fileName= 'idnex.html';
// $는 문자열의 마지막을 의미
/html$/.test(fileName); // true
const target= '12345';
// [...]밖의 ^는 문자열의 시작
// $ 는 문자열의 마지막
// \d 는 숫자
// + 는 앞선 패턴이 최소 한 번 이상 반복되는 문자열을 의미
/^\d+$/.test(target); // true
const target= ' hi!';
// \s는 여러가지 공백문자 의미
/^[\s]+/.test(target); // true
const id= 'abc1234';
// [...]밖의 ^는 문자열의 시작
// $ 는 문자열의 마지막
// \d 는 숫자
// + 는 앞선 패턴이 최소 한 번 이상 반복되는 문자열을 의미
/^[A-Za-z0-9]{4,10}$/.test(id); // true
표준 빌트인 객체인 String 객체는 생성자 함수 객체다. 그러므로 new
연산자와 함께 호출하여 String
인스턴스를 생성할 수 있다.
const strObj = new String();
console.log(strObj); // String {length:0, [[PrimitiveValue]]:""}
String
생성자 함수의 인수로 문자열을 전달하면서 new
연산자와 함께 호출하면 [[StringData]] 내부 슬롯에 인수로 전달받은 문자열을 할당한 String
래퍼 객체를 생성한다.const strObj = new String('Lee');
console.log(strObj[0]); //L
strObj[0] ='S';
console.log(strObj); // 'Lee'
String
래퍼 객체는 배열과 유사하게 인덱스를 사용하여 각 문자에 접근할 수 있다.let strObj= new String(123);
console.log(strObj); // String(0:"1", 1:"2", 2:"3", length:4, ...}
String
생성자 함수의 인수로 문자열이 아닌 값을 전달하면, 인수를 문자열로 강제 변환한다.new
키워드를 쓰지않고 String
생성자 함수를 호출하면 String
인스턴스가 아닌 문자열을 반환한다.String(1); // -> "1"
String(true); // "true"
String
객체에는 원본 String
래퍼객체를 직접 변경하는 메서드는 존재하지 않는다.String
래퍼 객체도 읽기 전용 객체로 제공된다.const strObj = new String('Lee');
console.log(Object.getOwnPropertyDescriptors(strObj));
/*
{
0: {value: 'L', writable: false, enumerable: true, configurable: false}
1: {value: 'e', writable: false, enumerable: true, configurable: false}
2: {value: 'e', writable: false, enumerable: true, configurable: false}
length: {value: 3, writable: false, enumerable: false, configurable: false}
}
*/
const str="Hello World";
str.indexOf('l'); // 2
str.indexOf('or'); // 7
str.indexOf('x'); // -1
const str = "Hello World";
str.search(/o/) // 4
str.search(/x/) // -1
const str= 'Hello world';
str.startsWith('He') // true
str.startsWith('x') // false
str.startsWith(' ', 5); // true
const str= 'Hello world';
str.endsWith('ld'); // true
// str의 5자리까지(Hello)가 'lo'로 끝나는지 확인
str.endWith('lo', 5); // true
const str = 'Hello';
str.charAt(0); // H
str.ChartAt(5); // ''
const str = 'Hello World';
str.slice(0,5); // 'Hello'
str.slice(-5); // 'World'
const str = 'Hello World';
str.toUpperCase(); // 'HELLO WORLD'
const str = 'Hello World';
str.toLowerCase(); // 'hello world'
const str= ' foo ';
str.trim(); // 'foo'
str.trimStart() // "foo "
str.trimEnd() // " foo"
const str = 'abc';
str.repeat(); // ''
str.repeat(2); // 'abcabc'
const str= 'Hello world';
str.replace('world', 'Lee'); // -> 'Hello Lee'
const str= "How are you doing?";
str.split(' '); // ["How", "are", "you", "doing?"]
str.split(' ', 3); // ["How", "are", "you"]
const fullId = "20231113";
const last4Digits = fullId.slice(-4); // 1113
const crptorizedId = last4Digits.padStart(fullId.length, "*"); // ****1113