[ μλ°μ€ν¬λ¦½νΈ(JavaScript) ] RegExp(μ κ·ννμ)μ κ°λ κ³Ό μμ© μμ μ΄ν΄λ³΄κΈ°
π 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