-
[JavaScript] μ κ·ννμ(regular expression)JavaScript 2020. 7. 11. 16:28
π μ κ· ννμ μ μ
-
μλ°μ€ν¬λ¦½νΈμμ μ κ· ννμμ RegExp κ°μ²΄λ‘ ννλλ€.
-
μ κ· ννμ 리ν°λ΄μ ν μμ μ¬λμ(/) λ¬Έμ μ¬μ΄μ μμΉνλ€.
// sλ‘ λλλ λͺ¨λ λ¬Έμμ΄κ³Ό 맀μΉλλ€. const pattern = /s$/; // λ¬Έμμ΄ λ¦¬ν°λ΄ const pattern = new RegExp('s$'); // RegExp() μμ±μλ₯Ό μ¬μ©νμ¬ μ μ
π 리ν°λ΄ λ¬Έμ
-
λͺ¨λ μλ¬Έμμ μ«μλ κ·Έ λ¬Έμ κ·Έλλ‘ μ κ· ννμμμ 맀μΉλλ€.
-
νΉμ ν λΉ-μνλ²³ λ¬Έμλ€μ μμ¬λμ(\)λ‘ μμνλ μ΄μ€μΌμ΄ν λ¬Έμμ΄μ ν΅ν΄ μ§μνλ€.
-
ꡬλμ λ¬Έμ(?,!,.,λ±λ±)λ₯Ό μΌλ° λ¬Έμλ‘ μ·¨κΈν λ €λ©΄ λ°λμ \λ₯Ό λ¬Έμ μμ λΆμ¬μΌ νλ€.
// μμ¬λμλ₯Ό ν¬ν¨νλ λͺ¨λ λ¬Έμμ΄κ³Ό 맀μΉλλ€. const pattern = /\\/;
π λ¬Έμ ν΄λμ€
-
κ°λ³ 리ν°λ΄ λ¬Έμλ€μ κ·Έ λ¬Έμλ€μ λκ΄νΈ([])λ‘ λ¬Άμ΄μ λ¬Έμ ν΄λμ€λ‘ λ€λ£° μ μλ€.
-
λ¬Έμ ν΄λμ€λ ν΄λΉ ν΄λμ€ λ΄μ λͺ¨λ λ¬Έμμ 맀μΉλλ€.
// a, b, c μ€ μ무 κΈμμλ 맀μΉλλ€. const pattern = /[abc]/;
-
λΆμ λ¬Έμ ν΄λμ€λ λκ΄νΈ μμ μλ 무μλ€μ μ μΈν λͺ¨λ λ¬Έμμ 맀μΉλλ€.
-
λκ΄νΈμμ μΊλΏ(^)μ μ μΌ μμ λλ©΄ λΆμ λ¬Έμ ν΄λμ€λ₯Ό μ μν μ μλ€.
// a, b, cλ₯Ό μ μΈν λͺ¨λ λ¬Έμμ 맀μΉλλ€. const pattern = /[^abc]/;
-
νμ΄ν(-)μ μ¬μ©νμ¬ λ¬Έμμ λ²μλ₯Ό μ§μ ν μ μλ€.
// μλ¬Έμ aλΆν° zκΉμ§μ 맀μΉλλ€. const pattern = /[a-z]/; // λͺ¨λ μνλ²³ κΈμμ μ«μμ 맀μΉλλ€. const pattern = /[a-zA-Z0-9]/;
-
μλ° μ€ν¬λ¦½νΈ μ κ· ννμ λ¬Έλ²μλ μμ£Ό μ¬μ©λλ λ¬Έμ ν΄λμ€λ₯Ό λνλ΄λ νΉμ λ¬Έμμ μ΄μ€μΌμ΄ν λ¬Έμμ΄μ΄ μ μ λμ΄ μλ€.
-
μ΄μ€μΌμ΄νλ νΉμ λ¬Έμ ν΄λμ€λ₯Ό λκ΄νΈ λ΄μμ μ¬μ©ν μ μλ€.
// 곡백 λ¬Έμ νλ λλ μ«μ λ¬Έμ νλμ 맀μΉλλ€. const pattern = /[\s\d]/;
-
\bλ λ³λμ νΉλ³ν μλ―Έλ₯Ό μ§λκ³ μμ§λ§, λ¬Έμ ν΄λμ€ λ΄μμ μ¬μ©λλ©΄ λ°±μ€νμ΄μ€ λ¬Έμλ₯Ό λνλΈλ€.
-
μ κ· ννμμμ λ°±μ€νμ΄μ€ λ¬Έμ μ체λ₯Ό νννλ €λ©΄ νλμ μμλ§ μλ λ¬Έμ ν΄λμ€λ₯Ό μ¬μ©ν΄μΌ νλ€.
// λ°±μ€νμ΄μ€ 리ν°λ΄ const pattern = /[\b]/;
π μ κ· ννμ λ¬Έμ ν΄λμ€
-
λ¬Έμ μλ―Έ [...] λκ΄νΈ μ¬μ΄μ μλ ν λ¬Έμ. [^...] λκ΄νΈ μ¬μ΄μ μλ ν λ¬Έμ. . μ€λ°κΏ λ¬Έμλ μ λμ½λ λΌμΈ μ’ λ£ λ¬Έμλ₯Ό μ μΈν λͺ¨λ λ¬Έμ. \w ASCII μλ λ¬Έμ. [a-zA-Z0-9]μ κ°λ€. \W ASCII μλ λ¬Έμκ° μλ λͺ¨λ λ¬Έμ. [^a-zA-Z0-9]μ κ°λ€. \s λͺ¨λ μ λμ½λ 곡백 λ¬Έμ. \S μ λμ½λ 곡백 λ¬Έμκ° μλ λͺ¨λ λ¬Έμ. (but! \wμ \Sλ κ°μ§ μλ€.) \d λͺ¨λ ASCII μ«μ. [0-9]μ κ°λ€. \D ASCII μ«μκ° μλ λͺ¨λ λ¬Έμ. [^0-9]μ κ°λ€. [\b] λ°±μ€νμ΄μ€ 리ν°λ΄(νΉμν κ²½μ°)
π λ°λ³΅
-
λ°λ³΅μ μ§μ νλ λ¬Έμλ νμ λ°λ³΅μ μ§μ ν ν¨ν΄ λ€μ λμ¨λ€.
const pattern = /\d{2,4}/; // λ μ리μμ λ€ μ리μ μ«μμ 맀μΉλλ€. const pattern = /\w{3}\d?/; // 3κ°μ λ¬Έμμ μλ΅ κ°λ₯ν μ«μμ 맀μΉλλ€. const pattern = /\s+java\s+/; // javaμ μ λ€λ‘ νλ μ΄μμ 곡백 λ¬Έμλ₯Ό ν¬ν¨ν λ¬Έμμ΄κ³Ό 맀μΉλλ€. const pattern = /[^(]*/; // μμ κ΄νΈκ° μλ 0κ° μ΄μμ λ¬Έμμ 맀μΉλλ€.
π μ κ· ννμ λ°λ³΅ λ¬Έμ
-
λ¬Έμ μλ―Έ {n,m} μμ νλͺ©μ΄ μ μ΄λ nλ² μ΄μ, mλ² μ΄νλ‘ λνλλ€. {n,} μμ νλͺ©μ΄ nλ² μ΄μ λνλλ€. {n} μμ νλͺ©μ΄ μ ννκ² nλ² λνλλ€. ? μμ νλͺ©μ΄ 0 λλ ν λ² λνλλ€. μ¦, μλμ¬μλ μλ€.{0,1}κ³Ό κ°λ€. + μμ νλͺ©μ΄ ν λ² μ΄μ λνλλ€. {1,}κ³Ό κ°λ€. * μμ νλͺ©μ΄ 0λ² λλ κ·Έ μ΄μ λνλλ€. {0,}κ³Ό κ°λ€. -
* μ ? λ°λ³΅ λ¬Έμλ μμ μ€λ λ¬Έμκ° 0λ² λ§€μΉλλ€κ³ κ°μ£ΌνκΈ° λλ¬Έμ λ°λ³΅ λ¬Έμμ΄ μμ λ¬Έμκ° λ§€μΉλμ§ μλ μν©μμλ νμ©νλ€.
const pattern = /a*/; "bbbb".match(pattern); // ["", index: 0, input: "bbbb", groups: undefined]
π λ체, κ·Έλ£Ήν, μ°Έμ‘°
- μ κ· ννμ λ¬Έλ²μ λ체 ννμ(alternative), λΆλΆ ννμ κ·Έλ£Ήν(grouping subexpression), μ΄μ λΆλΆ ννμμ μ°Έμ‘°νλ νΉλ³ν λ¬Έμλ₯Ό ν¬ν¨νκ³ μλ€.
π¦ λ체 ννμ(alternative)
-
νμ΄ν λ¬Έμ( | )λ λ체 ννμμ ꡬλΆνλ€.
// λ¬Έμμ΄ ab λλ cd λλ efμ 맀μΉλλ€. const pattern = /ab|cd|ef/; // μΈ μ리μ μ«μλ¬Έμ λλ λ€ κ°μ μλ¬Έμλ‘ μ΄λ£¨μ΄μ§ λ¬Έμμ΄κ³Ό 맀μΉλλ€. const pattern = /\d{3}|[a-z]{4}/;
-
λ체 ννμμ 맀μΉλ₯Ό λ°κ²¬ν λκΉμ§ μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ μνλλ€.
// abμ μ μ©νλ©΄, μ€μ§ 첫 λ²μ§Έ κΈμ aλ§ λ§€μΉλλ€. const pattern = /a|ab/; "ab".match(pattern); // ["a", index: 0, input: "ab", groups: undefined]
π¦ λΆλΆ ννμ κ·Έλ£Ήν(grouping subexpression)
-
μ¬λ¬ νλͺ©μ νλμ λΆλΆ ννμμΌλ‘ λ¬Άκ³ (κ·Έλ£Ήν), μ΄λ κ² λ¬ΆμΈ νλͺ©λ€μ |,* ,+,? λ±μ΄ νλμ λ¨μλ‘ μ·¨κΈν μ μλλ‘ νλ κ²μ΄λ€.
// javaμ κ·Έλ€μμ μλ΅ κ°λ₯ν scriptκ° μ€λ λ¬Έμμ΄κ³Ό 맀μΉλλ€. const pattern = /java(script)?/; // ab λλ cdκ° ν λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄ νΉμ 무μμ΄ efμ 맀μΉλλ€. const pattern = /(ab|cd)+|ef/;
π¦ μ΄μ λΆλΆ ννμ
-
μ 체 ν¨ν΄ μμ λΆλΆ ν¨ν΄μ μ μνλ κ²μ΄λ€.
-
μ κ· ννμμ΄ λμ λ¬Έμμ΄μ 맀μΉλλ©΄ κ΄νΈλ‘ λλ¬μΈμΈ νΉμ ν¨ν΄κ³Ό 맀μΉλλ λΆλΆ λ¬Έμμ΄μ μΆμΆν μ μλ€.
// λ§μ½ κ° λ§€μΉμ λν΄ λμ μλ μ«μλ₯Ό λ½λλ€λ©΄, κ΄νΈ μμ λκ³ μ°ΎμλΈ λ§€μΉ κ²°κ³Όμμ μ«μλ₯Ό μΆμΆν μ μλ€. const pattern = /[a-z]+(\d+)/;
-
κ΄νΈλ‘ λλ¬μΈμΈ λΆλΆ ννμμ μ¬μ©νλ©΄ κ°μ μ κ· ννμ λ΄μμ ν΄λΉ λΆλΆμ λ€μ μ°Έμ‘°ν μ μλ€.
-
μλ₯Ό λ€μ΄ \1μ 첫 λ²μ§Έ λΆλΆ ννμμ μ°Έμ‘°, \3μ μΈλ²μ§Έ λΆλΆ ννμμ μ°Έμ‘°νλ€.
// μ€μ²©λ λΆλΆ νν ([Ss]cript)λ \2λ‘ μ°Έμ‘°ν μ μλ€. const pattern = /([Jj]ava([Ss]cript?)\sis\s(fun\w*)/;
-
λ¬Έμ μλ―Έ νμ΄ν λ¬Έμ λ체. μΌμͺ½μ μγ΄λ λΆλΆ ννμμ΄λ μ€λ₯Έμͺ½μ μλ λΆλΆ ννμ μ€ νλλ₯Ό 맀μΉνλ€. (...) κ·Έλ£Ήν. νλμ λ¨μλ‘ κ·Έλ£Ήνλ μμ΄ν μΌλ‘ * ,+,?,νμ΄ν λ¬Έμλ±μ μν΄ μ¬μ©λ μ μλ€.
λμ€μ μ΄ κ·Έλ£Ήμ μ°Έμ‘°ν μ μλλ‘ μ΄ κ·Έλ£Ήκ³Ό 맀μΉλ λ¬Έμλ₯Ό κΈ°μ΅νλ€.(?:...) κ·Έλ£Ήνλ§ νλ€. κ·Έλ£Ήμ νλͺ©λ€μ νλμ λ¨μλ‘ μ·¨κΈλμ§λ§, μ΄ κ·Έλ£Ήμ 맀μΉλλ λ¬Έμλ€μ κΈ°μ΅νμ§λ μλλ€. \n nλ²μ§Έ κ·Έλ£Ήμ΄ μ²μ 맀μΉνλ λ¬Έμμ κ°μ λ¬Έμλ₯Ό 맀μΉνλ€.
π μ κ· ννμ μ΅μ»€(anchor)
-
맀μΉμ μ¬μ©ν λ¬Έμλ₯Ό μ§μ νμ§ μκ³ λ§€μΉκ° μΌμ΄λ μ μλ μ μ ν μμΉλ₯Ό μ§μ νλ€.
-
μμ λΆλΆμ μ κ·μμ κ³ μ νλ ^μ λ¬Έμμ΄μ λ§μ§λ§μ μ κ·μμ κ³ μ νλ $κ° λ§μ΄ μ¬μ©λλ€.
// JavaScript λ¬Έμμ΄ μμ²΄κ° λ§€μΉλλ€. const pattern = /^JavaScript$/; // μ΄ κ²½μ° λΆνμν 곡배κΉμ§ λ€μ΄κ°λ€. const pattern2 = /\sJava\s/; "my Java Script".match(pattern2); // [" Java ", index: 3, input: " my Java Script ", groups: undefined] // λ¨μ΄ κ²½κ³μ 맀μΉλλ€. λΆνμν κ³΅λ°±μ΄ μλ€. const pattern3 = /\bJava\b/; "my Java Script".match(pattern3); // ["Java", index: 3, input: "my Java Script", groups: undefined]
-
(?= μ ) μ¬μ΄μ ννμμ΄ μμΌλ©΄ μ΄λ κΈμ ν μ λ°© νμ μ μΈλ¬Έμ΄κ³ , μ΄λ μ¬μ΄μ μλ λ¬Έμλ€μ΄ λ°λμ 맀μΉλμ΄μΌ νλ€λ μλ―Έμ§λ§, 맀μΉλ λ¬Έμμ΄μ΄ κ²°κ³Όμ ν¬ν¨λμ§ μλλ€λ λ»μ΄λ€.
-
(?!λ₯Ό μ¬μ©νμ¬ μ μΈλ¬Έμ λ§λ€λ©΄ λΆμ ν μ λ°© νμμ΄κ³ , κ·Έλ€μμ λμ€λ λ¬Έμμ΄λ€μ΄ 맀μΉλλ©΄ μ λλ€λ λ»μ΄λ€.
-
β¨ λ μμΈν λ΄μ©μ μ°Έκ³
-
λ¬Έμ μλ―Έ ^ λ¬Έμμ΄μ μμ λΆλΆ, μ κ·μμ΄ μ΄λ € μ€μ λμμΌλ‘ νλ κ²½μ° ν μ€μ μμκ³Ό μΌμΉνλ€. $ λ¬Έμμ΄μ λμ λνλΈλ€. μ¬λ¬ μ€μΌ κ²½μ° ν μ€μ λ§μ§λ§μ λνλΈλ€. \b λ¨μ΄ κ²½κ³λ₯Ό λνλΈλ€ \B λ¨μ΄ κ²½κ³κ° μλ κ³³μ μμΉλ₯Ό λνλΈλ€. (?=p) μ λ°© νμ μ μΈμΌλ‘ ν¨ν΄ pμ 맀μΉλμ΄μΌ νμ§λ§, λ§€μΉ κ²°κ³Όμλ ν¬ν¨λμ§ μλλ€ (?!p λΆμ ν μ λ°© νμ μ μΈμΌλ‘ '(?!' λ€μμ λμ€λ λ¬Έμλ€μ ν¨ν΄ pμ 맀μΉλμ§ μμμΌ νλ€.
π νλκ·Έ(flag)
- λ€λ₯Έ μ κ· ννμ λ¬Έλ²κ³Όλ λ¬λ¦¬ νλκ·Έλ / λ¬Έμ μ λ°κΉ₯μ, μ¦ λ λ²μ§Έ μ¬λμ λ€μμ μ΄λ€.
- i νλκ·Έλ λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκ³ ν¨ν΄ 맀μΉμ΄ λμ΄μΌ νλ€.
- g νλκ·Έλ μ μ ν¨ν΄ 맀μΉμ μ§μ νλλ°, μ¦ κ²μν λ¬Έμμ΄λ΄μμ ν¨ν΄μ 첫 λ²μ§Έ λ§€μΉ κ²°κ³ΌλΏ μλλΌ λͺ¨λ λ§€μΉ κ²°κ³Όλ₯Ό μ»λλ€.
- m νλκ·Έλ μ¬λ¬ μ€μ κ±Έμ³ ν¨ν΄ 맀μΉμ μννλ κ²μΌλ‘ m νλκ·Έλ₯Ό μ§μ ν μνμμ κ²μλ λ¬Έμμ΄μ΄ μ€λ°κΏ λ¬Έμλ₯Ό ν¬ν¨νκ³ μμΌλ©΄, ^μ $ μ΅μ»€λ λ¬Έμμ΄μ μμκ³Ό λμ λνλΌ λΏλ§ μλλΌ κ° μ€μ μμκ³Ό λμ λνλ΄κΈ°λ νλ€.
// java λΏλ§ μλλΌ Java\nis fun μλ 맀μΉλλ€. const pattern = /java$/im/;
π μ κ· ννμ νλκ·Έ
-
λ¬Έμ μλ―Έ i λμλ¬Έμλ₯Ό ꡬλ³νμ§ μλ 맀μΉμ μννλ€. g μ μ 맀μΉμ μννλ€. μ¦, μ²μ 맀μΉμμ λλ΄μ§ μκ³ λͺ¨λ 맀μΉλ₯Ό μ°Ύλλ€. m μ¬λ¬ μ€λͺ¨λλ‘ ^μ μ€μ μμμ΄λ λ¬Έμμ΄μ μμκ³Ό μΌμΉνκ³ , $λ μ€μ λμ΄λ λ¬Έμμ΄μ λκ³Ό μΌμΉνλ€.
π μ°Έκ³ λ¬Έμ
- MDN 곡μ λ¬Έμ : https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/%EC%A0%95%EA%B7%9C%EC%8B%9D
'JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JavaScript ES6/ ecmascript 2015] λ¬Έλ² μ 리 (0) 2020.06.19 -