๐ RegExp(์ ๊ทํํ์)์ ๊ฐ๋ ๊ณผ ์์ฉ ์์ ์ดํด๋ณด๊ธฐ
RegExp๋ ์ ๊ทํํ์์ด๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ ๋ฌธ์์ด์ ๋์์ผ๋ก ํจํด ๋งค์นญ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ํจํด ๋งค์นญ ๊ธฐ๋ฅ๊ณผ ํน์ ํจํด๊ณผ ์ผ์นํ๋ ๋ฌธ์์ด์ ๊ฒ์ํ๊ฑฐ๋ ์ถ์ถ ๋๋ ์นํํ ์ ์๋ ๊ธฐ๋ฅ์ ๋งํ๋ค. ์ฌ๋ฌ ๋ฐฉ๋ฉด์์๋ ์ฌ์ฉ๋์ง๋ง ๋ณดํต ๊ธ์ด์ด๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๊ฑฐ๋ ํ๋ก์ ํธ ์ util ๊ด๋ จ ํจ์๋ฅผ ๋ง๋ค ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค. ์ ๊ทํํ์์ ์ฅ์ ์ ๋ฐ๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ ์์ด ํจํด์ ์ ์ํ๊ณ ํ
์คํธํ๋ ๊ฒ์ผ๋ก ๊ฐ๋จํ ์ฒดํฌํ ์ ์๋ค. ํ์ง๋ง, ์ฌ๋ฌ ๊ฐ์ง ๊ธฐํธ๋ฅผ ํผํฉํ์ฌ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฒ์ ์ ํ๋ค๋ฉด ๊ฐ๋
์ฑ์ด ๋งค์ฐ ์ข์ง ๋ชปํ ๋จ์ ์ด ์๋ค. ์ ๊ทํํ์์๋ ๋ค์ํ ํจํด์ด ์์ง๋ง ๊ทธ์ค ๋ํ์ ์ผ๋ก ์ฐ์ด๋ ๊ฒ๋ค๋ง ์์๋ณด์.
๋ณธ๋ก ์ผ๋ก ๋ค์ด๊ฐ๊ธฐ ์ ์ ์ ๊ท ํํ์์ ๊ฒ์ ๋ฐฉ์์ ์ค์ ํ๋ ํ๋๊ทธ๊ฐ ์๋๋ฐ, ์ด 6๊ฐ์ ํ๋๊ทธ๊ฐ ์๋ค. ํ๋๊ทธ๋ ์ฌ๋ฌ ๊ฐ ๋ฃ์ ์ ์์ผ๋ฉฐ, ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ์๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ฌ ํจํด์ ๊ฒ์ํ๋ค. ๋ํ ๊ฒ์ ๋งค์นญ ๋์์ด ์ฌ๋ฌ ๊ฐ์ฌ๋ ์ฒซ ๋ฒ์งธ ๋งค์นญ ๋์๋ง ๊ฒ์ํ๊ณ ์ข
๋ฃํ๋ค.(์ฌ๋ฌ ๊ฐ์ ๋งค์นญ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ค๋ฉด gํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.)
1. g(global): ํจํด๊ณผ ์ผ์นํ๋ ๋ชจ๋ ๊ฐ๋ค์ ์ ์ญ ๊ฒ์ํ๋ค. (๋ฐ์ฑ๋ฌธ์ ์์ด๋ก ํด์ํ ๊ฒ์ด ์๋ ๐)
2. i(ignoreCase): ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ํจํด์ ๊ฒ์ํ๋ค.
3. m(multiLine): ๋ฌธ์์ด์ ํ์ด ๋ฐ๋๋๋ผ๋ ํจํด ๊ฒ์์ ์ง์ํ๋ค.
4. s(source): ๊ฐํ ๋ฌธ์์ธ `\n`๋ ํฌํจํ๋๋ก ํ์ฑํ ํ๋ค.
5. u(unicode): ์ ๋์ฝ๋ ์ ์ฒด๋ฅผ ์ง์ํ๋ค.
6. y(sticky): ๋ฌธ์ ๋ด ํน์ ์์น์์ ๊ฒ์์ ์งํํ๋ `sticky` ๋ชจ๋๋ฅผ ํ์ฑํ ์ํจ๋ค.
ํ๋๋ง ๋ ์์๋ณด์. ๋ฐ๋ก ํจํด์ธ๋ฐ, ํ๋๊ทธ๋ ์ ๊ท ํํ์์ ๊ฒ์ ๋ฐฉ์์ ์ค์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค๋ฉด, ์ ๊ทํํ์์ ํจํด์ ๋ฌธ์์ด์ ์ผ์ ํ ๊ท์น์ ํํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ํจํด์ ๋ฌธ์์ด์ ๋ฐ์ดํ ๋์ /๋ก ์ด๊ณ ๋ซ๋๋ค. ์ฆ, "Hello"๊ฐ ์๋๋ผ /Hello/๋ก ์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ๋ง์ฝ, ๋ฐ์ดํ๋ฅผ ํฌํจํ๋ค๋ฉด ๋ฐ์ดํ๊น์ง๋ ํจํด์ ํฌํจ๋๋ ์ด ์ ์ ์ฃผ์ํ์. ํจํด์ ์ข
๋ฅ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ๋ฌ ๊ฐ ์์ง๋ง ์ฃผ๋ก ์ฌ์ฉํ๋ ํจํด์ ๋ค์๊ณผ ๊ฐ๋ค.
[ ]: ๊ดํธ์์ ์๋ ๊ฐ์or์ ๋ํ๋\d: [ 0-9 ]๋ฅผ ์๋ฏธํจ\D: ์ซ์๊ฐ ์๋ ๋ฌธ์๋ฅผ ์๋ฏธํจ\w: ์ํ๋ฒณ, ์ซ์, ์ธ๋์ค์ฝ์ด๋ฅผ ์๋ฏธํจ([ A-Za-z0-9 ])\W: ์ํ๋ฒณ, ์ซ์, ์ธ๋์ค์ฝ์ด๊ฐ ์๋ ๋ฌธ์๋ฅผ ์๋ฏธํจ/s: ์ฌ๋ฌ ๊ฐ์ง ๊ณต๋ฐฑ ๋ฌธ์(์คํ์ด์ค, ํ ๋ฑ)๋ฅผ ์๋ฏธํ๋ค.[/t/r/n/v/f]์ ๊ฐ์ ์๋ฏธ๋ค.*: ์ด์ ํญ๋ชฉ์ 0๋ฒ ์ด์ ๋ฐ๋ณตํจ+: ์ด์ ํญ๋ชฉ์ 1ํ ์ด์ ๋ฐ๋ณตํจ^:[ ]๋ด๋ถ์ ์๋^๋not์ ์๋ฏธํ๊ณ ,[ ]์ธ๋ถ์ ์๋^๋ ๋ฌธ์์ด์ ์์์ ์๋ฏธํ๋ค.$: ๋ฌธ์์ด์ ๋ง์ง๋ง์ ์๋ฏธํ๋ค.?: ์์ ํจํด์ด ์ต๋ ํ ๋ฒ ์ด์(0๋ฒ ํฌํจ) ๋ฐ๋ณต๋๋์ง๋ฅผ ์๋ฏธํ๋ค. ์ฆ, ์์ ํจํด (s)์ด ์๊ฑฐ๋ ์์ด๋ ๋งค์น๋๋ค.{m,n}: ๋ฐ๋ณต ๊ฒ์ ํจํด์ผ๋ก ์ต์m๋ฒ, ์ต๋n๋ฒ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด์ ์๋ฏธํ๋ค. ์ฝค๋ง ๋ค์ ๊ณต๋ฐฑ์ด ์ค์ง ์๊ฒ ์ฃผ์ํ์.
์, ์ด์ ํ๋๊ทธ์ ํจํด์ ๋ํด์ ์์๋ดค์ผ๋ ๋ณธ๊ฒฉ์ ์ผ๋ก RegExp ๋ฉ์๋์ ๋ํด ์์๋ณด์. MDN์ ์ ํ์๋ฏ์ด ๋ฉ์๋๋ ์ฌ๋ฌ ๊ฐ ์์ง๋ง, ์ฌ๊ธฐ์๋ exec, match, test์ ๋๋ง ์์๋ณด์.
exec: ๋งค์นญ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค. ๋งค์นญ ๊ฒฐ๊ณผ๊ฐ ์๋ ๊ฒฝ์ฐnull๋ก ๋ฐํํ๋ค. ํน์ด์ฌํญ์ผ๋ก๋gํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์ฒซ ๋ฒ์งธ ๋งค์นญ ๊ฒฐ๊ณผ๋ง ๋ฐํํ๋ค.
let target = "is";
let str = "what is your name? my name is ywtechit";
console.log(/is/g.exec(target));
๐๐ฝ [ 'is', index: 0, input: 'is', groups: undefined ]
match: ์ฃผ์ด์ง ๋ฌธ์์ด์ ๋ํด ์ผ์นํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.exec๋ฉ์๋์๋ ๋ค๋ฅด๊ฒgํ๋๊ทธ๋ฅผ ์ง์ ํ๋ฉด ๋ชจ๋ ๋งค์นญ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค.
// ex1: ๋ฌธ์ 'p'์ ๊ฐ์๋ฅผ return ํ์์ค
let lyrics = "i have a pen pineapple apple pen";
let reg = lyrics.match(/p/g) // [ 'p', 'p', 'p', 'p', 'p', 'p', 'p' ]
console.log(reg.length)
๐๐ฝ 7 // ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ๊ณง `p`์ ๊ฐ์์ ๋์ผํ๋ค.
let target = "what is your name? my name is ywtechit";
// ex2: is ๊ฐ์ ํ๋ฒ๋ง ์ฐพ๊ธฐ
console.log(target.match(/is/));
๐๐ฝ [ 'is', index: 5, input: 'what is your name? my name is ywtechit', groups: undefined ]
// ex3: is ๊ฐ์ ๋ชจ๋ ์ฐพ๊ธฐ
console.log(target.match(/is/g));
๐๐ฝ [ 'is', 'is' ]
// ex4: A๊ฐ 2๋ฒ์ด์ ๋ฐ๋ณตํ๋ ๋ฌธ์์ด์ ๋ฐํํ๊ธฐ
const target = "A AA B BB Aa Bb AAA";
const regExp = /A{2,}/g;
const result = target.match(regExp)
console.log('result :>> ', result); // [ "AA", "AAA" ]
// ex5: URL ์ ์ผ ๋ง์ง๋ง ๊ฐ๋ง ์ถ์ถํ๋ ์ ๊ทํํ์
const url = "https://swtrack.elice.io/courses/16306/lecturerooms/16157";
const reg = url.match(/\/([0-9]+)$/);
console.log(reg);
๐๐ฝ
[
0: '/16157',
1: '16157',
2: index: 51,
3: input: 'https://swtrack.elice.io/courses/16306/lecturerooms/16157',
4: groups: undefined
]
// ex6: URL์ ํฌํจ๋ ํน์ ๋ฌธ์ ๋ถ๋ฆฌํ๊ธฐ
let reg = s.match(/\/(lecturerooms)\/([0-9]+$)/);
console.log(reg);
๐๐ฝ
[
0: "/lecturerooms/16157"
1: "lecturerooms"
2: "16157"
groups: undefined
index: 38
input: "https://swtrack.elice.io/courses/16306/lecturerooms/16157"
length: 3
]
// ex7: ๋ฌธ์์ ๋ด์ฉ๊ณผ ์๊ด์์ด 3์๋ฆฌ ๋ฌธ์์ด๊ณผ ๋งค์นํ๊ธฐ
let target = "Is this your mac? Is this your phone?";
console.log(target.match(/.../g));
๐๐ฝ
[
'Is ', 'thi', 's y',
'our', ' ma', 'c? ',
'Is ', 'thi', 's y',
'our', ' ph', 'one'
]
test: ๋งค์นญ๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฆฌ์ธ(boolean)๊ฐ์ผ๋ก ๋ฐํํ๋ค. ์ง๊ธ๊น์ง ์ด ๋ฉ์๋๋ฅผ ์ ์ผ ๋ง์ด ์ฌ์ฉํ๋ค. ์ฌ๋ด์ผ๋ก ์ฌ๋ฐ๋ฅธ ์ด๋ฉ์ผ ํ์์ธ์ง ๊ฒ์ฌํ๋ ๊ณต์ ํจํด(FC 5322 Official Standard)์ emailregex.com์์๋ ํ์ธ ํ ์ ์๋ค.
// ex1: ํด๋น ๋ฌธ์์ด์ด ์๋์ง ๊ฒ์ฌํ๊ธฐ
let target = "what is your name? my name is ywtechit";
console.log(/is/.test(target)); // true
console.log(/typescript/.test(target)); // false
// ex2: new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ RegExp์ new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง ์์ RegExp
const str = 'table football';
const regex = new RegExp('foo*');
const sameRegex = /foo*/;
const globalRegex = new RegExp('foo*', 'g');
console.log(regex.test(str)); // true
console.log(globalRegex.lastIndex); // 0
console.log(globalRegex.test(str)); // true
console.log(globalRegex.lastIndex); // 9
console.log(globalRegex.test(str)); // false
// ex3: ์ฌ๋ฐ๋ฅธ ์ ํ๋ฒํธ ํ์์ธ์ง ํ๋ณํ๋ ํจํด
const tel = "010-1234-1234"
const regExp = /^\d{3}-\d{4}-\d{4}$/;
const result = regExp.test(tel);
console.log('result :>> ', result); // true
// ex4: http://, https://๋ก ์์ํ๋ ๋๋ฉ์ธ์ธ์ง ํ๋ณํ๋ ํจํด
const domain = "https://www.naver.com";
const regExp = /^(http|https):\/\//;
const regExp2 = /^https?:\/\//;
const result = regExp.test(domain);
console.log('result :>> ', result); // true
// ex5: html๋ก ๋๋๋ ํ์ผ๋ช
์ธ์ง ํ๋ณํ๋ ํจํด
const string = "index.html";
const regExp = /html$/
const result = regExp.test(string)
console.log('result :>> ', result); // true
// ex6: ์์์ ์ ์ต๋ 2๋ฒ๊น์ง๋ง ์ฌ์ฉํ๋ ์
๋ ฅ์ธ๊ฐ?
const isUptoTwoDecimalPoint = (input: string): boolean => {
const isIncludeDot = /[.]/g;
if (isIncludeDot.test(input)) {
const isTwoDecimalPoint = /^\d+[.]\d{1,2}$/;
if (isTwoDecimalPoint.test(input)) return true;
return false;
}
return true;
};
// ex7: ํ๋ ์ด์์ ๊ณต๋ฐฑ์ผ๋ก ์์ํ๋๊ฐ?
const string = " Hi!!";
const regExp = /^[\s]+/
const result = regExp.test(string)
console.log('result :>> ', result); // true
// ex8: ์ํ๋ฒณ ๋์๋ฌธ์ ๋๋ ์ซ์๋ก ์์ํ๊ณ ๋๋๋ฉฐ 4~10์๋ฆฌ์ธ๊ฐ?
const string = "abcd8637";
const regExp = /^[\w]{4,10}$/
const result = regExp.test(string)
console.log('result :>> ', result); // true
// ex9: ์ฌ๋ฐ๋ฅธ ์ด๋ฉ์ผ ํ์์ธ๊ฐ?
const string = "ywtechit@gmail.com";
const regExp = /^[\w]([-_\.]?[\w])*@[\w]([-_\.]?[\w])*\.[a-zA-Z]{2,3}$/
const result = regExp.test(string)
console.log('result :>> ', result); // trueโโโโโโat
// General Email Regex (RFC 5322 Official Standard)
const regExp = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
// HTML5 input ํ๊ทธ์ type=”email”์ ์ฌ์ฉ๋๋ ํจํด(from W3C: Ref 5.)
<input type="email" placeholder="Enter your email" />
const regExp = /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
// ex10: ํน์๋ฌธ์ ํ๋ณํ๊ธฐ
let s = "(A(BC)D)EF(G(H)(IJ)K)LM(N)";
let answer = "";
console.log(solution(s));
function solution(s) {
for (let x of s) {
if (/[A-Z]/.test(x)) answer+=x;
}
return answer;
}
๐๐ฝ ABCDEFGHIJKLMN
replace: ์ฃผ์ด์ง ๋ฌธ์์ด๋ด์ ์ผ์น๋ฅผ ์๋ก์ด ๋ฌธ์์ด๋ก ๋์นํ๋ ๋ฉ์๋
// ex1: ๊ณต๋ฐฑ ์ ๊ฑฐํ๊ธฐ
const str =
"๋๋๋ง์ธ๋ฏธ ๋๊ท์ ๋ฌ์๋ฌธ์์๋ก ์๋ฅด ์ฌ๋ง๋ ์๋ํ ์ ์ด๋ฐ ์ ์ฐจ๋ก ์ด๋ฆฐ ๋ฐฑ์
ฉ์ด ๋๋ฅด๊ณ ์ ธ ํ๋ฒ ์ด์
๋ ๋ง์ฐธ๋ค ์ ๋จ๋ค ์๋ฌํด๋ ๋ชฏํง ๋
ธ๋ฏธํ๋์ ๋ด ์ด๋ ์ํ์ผ ์ด์ฟ๋น๋๊ฒจ ์๋ก ์ค๋ฏ ์ฌ๋ซ ์ง๋ ๋งน๊ฐ๋
ธ๋์ฌ๋๋ง๋ค ํด์ฌ ์๋น๋๊ฒจ ๋ ๋ก ์ค๋ฉ ๋ปํํ ํ๊ณ ์ ธ ํ ๋ฐ๋ผ๋ฏธ๋๋ผ";
const result = str.replace(/\s/g, "")
console.log('result :>> ', result);
๐๐ฝ ๋๋๋ง์ธ๋ฏธ๋๊ท์๋ฌ์๋ฌธ์์๋ก์๋ฅด์ฌ๋ง๋์๋ํ ์์ด๋ฐ์ ์ฐจ๋ก์ด๋ฆฐ๋ฐฑ์
ฉ์ด๋๋ฅด๊ณ ์ ธํ๋ฒ ์ด์
๋๋ง์ฐธ๋ค์ ๋จ๋ค์๋ฌํด๋๋ชฏํง๋
ธ๋ฏธํ๋์๋ด์ด๋์ํ์ผ์ด์ฟ๋น๋๊ฒจ์๋ก์ค๋ฏ์ฌ๋ซ์ง๋๋งน๊ฐ๋
ธ๋์ฌ๋๋ง๋คํด์ฌ์๋น๋๊ฒจ๋ ๋ก์ค๋ฉ๋ปํํํ๊ณ ์ ธํ ๋ฐ๋ผ๋ฏธ๋๋ผ
// ex2: ํน์๋ฌธ์ ์ ๊ฑฐํ๊ธฐ
let s = "found7, time: study; Yduts; emit, 7Dnuof";
let notIncludeSpecialCharacter = s.replace(/[^A-z]/g, '');
๐๐ฝ foundtimestudyYdutsemitDnuof
// ex3: ํน์๋ฌธ์ ์ค์์ ๊ณต๋ฐฑ์ ์ด๋ฆฌ๊ณ ์ถ์ ๋
let notIncludeSpecialCharacter = s.replace(/[^A-z | " "]/g, '');
๐๐ฝ found time study yduts emit dnuof
์ง๊ธ๊น์ง ์ ๊ทํํ์์ ๊ฐ๋ ๊ณผ ์์ฉ ์์ ๋ฅผ ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด์๋ค. ์ฒ์ ์ ๊ทํํ์์ ์ ํ์ ๋ ๋ํต ์ดํด๊ฐ ๋์ง ์์ ๋ฌธ๋ฒ์ด์๋๋ฐ, ๋ช ๋ฒ ์ฌ์ฉํด ๋ฒ๋ฆํ๋๊น ๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ๋ณด๋ค ์ด์ฉํ๊ธฐ๊ฐ ์ฝ๊ณ ํธํ๋ค. ์กฐ๊ธ์ฉ ์ ๊ทํํ์์ ์ฌ์ฉํ๋ฉฐ ๊ฒฝํ์ ์๊ณ ๋์ค์ ํ์ ์ ๋์ ํ๊ฒ ๋๋ฉด ์์ ๋ฅผ ๊น๋จน์ง ์๋๋ก ๊ธฐ๋กํด๋ฌ์ผ๊ฒ ๋ค.
Reference
๋๊ธ