π 31.1 μ κ·μ ννμμ΄λ?
μ κ·μ ννμ regular expression
: μΌμ ν ν¨ν΄μ κ°μ§ λ¬Έμμ΄μ μ§ν©μ νννκΈ° μν΄ μ¬μ©νλ νμ μΈμ΄
- JS μ κ³ μ λ¬Έλ²μ΄ μλλ©°, λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄μ λ΄μ₯λΌμμ.
- λ¬Έμμ΄μ λμμΌλ‘ ν¨ν΄ λ§€μΉ κΈ°λ₯μ μ 곡. ( = νΉμ ν¨ν΄κ³Ό μΌμΉνλ λ¬Έμμ΄μ κ²μ, μΆμΆ, μΉνν μ μλ€.)
- μ κ·μμ μ¬μ©νμ§ μμΌλ©΄ λ°λ³΅λ¬Έκ³Ό 쑰건문μ ν΅ν΄ νλ€κ² 체ν¬ν΄μΌν¨.
π 31.2 μ κ·μ ννμμ μμ±
μ κ· ννμ κ°μ²΄λ₯Ό μμ±νλ λ°©λ²
1. μ κ·μ 리ν°λ΄
- ν¨ν΄κ³Ό νλκ·Έλ‘ κ΅¬μ±λ¨.
const reg = /is/i;
2. RegExp μμ±μ ν¨μ
const reg = new RegExp(/is/i);
π 31.3 RegExp λ©μλ
31.3.1 RegExp.prototype.exec
λ¬Έμμ΄ μΈμλ‘ μ λ¬ λ°μ
λ§€μΉ κ²°κ³Όλ₯Ό πreturn
["is", index: 5, input: "Is this all there is?", groups: undefined]
μλ€λ©΄ null return
- g νλκ·Έλ₯Ό μ μ©ν΄λ 첫λ²μ§Έ λ§€μΉ κ²°κ³Όλ§ λ°ν
31.3.2 RegExp.prototype.text
μΈμλ‘ μ λ¬ λ°μ λ¬Έμμ΄ -> λ§€μΉ κ²°κ³Όλ₯Ό boolean μΌλ‘ return
31.3.2 RegExp.prototype.match
μΈμλ‘ μ λ¬ λ°μ λ¬Έμμ΄ -> λ°°μ΄λ‘ λ°ν
- g νλκ·Έλ₯Ό μ μ©λλ©΄ λͺ¨λ λ§€μΉ κ²°κ³Ό λ°ν
π 31.4 νλκ·Έ
μ κ· ννμμ κ²μ λ°©μ.
- μ΅μ μ΄λ―λ‘ μ νμ μ¬μ© κ°λ₯.
- μμμ μκ΄μλ€.
π νλκ·Έλ₯Ό μ¬μ©νμ§ μμΌλ©΄
- λμλ¬Έμλ₯Ό ꡬλ³ν΄μ ν¨ν΄μ κ²μ
- 맀μΉμ΄ μ¬λ¬κ°μ¬μ 첫λ²μ§Έ λ§€μΉ λμλ§ κ²μνκ³ μ’ λ£ν¨.
const target = 'Is this all there is?'
console.log(target.match(/is/g));
// [ 'is', 'is' ]
console.log(target.match(/is/ig));
//[ 'Is', 'is', 'is' ]
π 31.5 ν¨ν΄
ν¨ν΄μ / λ‘ μ΄κ³ λ«μΌλ©° λ¬Έμμ΄μ λ°μ΄νλ μλ΅νλ€.
λ°μ΄ν ν¬ν¨μ -> λ°λ‘¬νλ ν¨ν΄μΌλ‘ μΈμ.
μΌμΉνλ λ¬Έμμ΄μ΄ μ‘΄μ¬νλ©΄ "μ κ· ννμκ³Ό 맀μΉνλ€" λΌκ³ νν.
31.5.1 λ¬Έμμ΄ κ²μ
μ κ·μμ μμ±νλ κ²λ§μΌλ‘ κ²μλμ§ μμ.
λ©μλλ₯Ό μ¬μ©ν΄μΌν¨.
i : λμλ¬Έμ ꡬλ³νμ§ μλ νλκ·Έ
g : λͺ¨λ λ¬Έμμ΄μ μ μ κ²μνλ νλκ·Έ
31.5.2 μμμ λ¬Έμμ΄ κ²μ
. μ λ¬Έμ νκ°λ₯Ό μλ―Έ.
λ¬Έμμ λ΄μ©μ μκ΄μλ€.
곡백κΉμ§ ν¬ν¨λμ΄ κ²μλλκ±Έ λ³Ό μ μλ€.
31.5.3 λ°λ³΅ κ²μ
{m,n}
μ΅μ m λ², μ΅λ n λ² λ°λ³΅λλ λ¬Έμμ΄μ μλ―Έ.
(m,n μ¬μ΄μ 곡백 λ£μΌλ©΄ μλ μν¨)
{n} μ {n,n} κ³Ό κ°λ€.
AA, A κ° λ°λ‘ λμ΄.
const target = 'A AA B BB Aa Bb AAA'
console.log(target.match(/A{1,2}/g));
//[ 'A', 'AA', 'A', 'AA', 'A' ]
{n,} : μ ν¨ν΄μ΄ μ΅μ n λ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μλ―Έ.
+ : μμ ν¨ν΄μ΄ νλ² μ΄μ λ°λ³΅λλ λ¬Έμ. {1,} κ³Ό κ°λ€.
AAA κ° λμ΄.
- λΆν΄λμ§ μμ λ¨μ΄ λ λ²¨λ‘ κ²μνκΈ° μν¨.
const target = 'A AA B BB Aa Bb AAA'
console.log(target.match(/A+/g));
//[ 'A', 'AA', 'A', 'AAA' ]
? : μ΅λ νλ² (0λ² ν¬ν¨) μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μλ―Έ. {0,1} κ³Ό κ°λ€.
31.5.4 OR κ²μ
| μ or μ μλ―Έλ₯Ό κ°λλ€.
/A|B/ λ 'A' λλ 'B' λ₯Ό μλ―Έ.
- λΆν΄λμ§ μμ λ¨μ΄ λ λ²¨λ‘ κ²μνκΈ° μν΄ + λ₯Ό ν¨κ» μ¬μ©
[] μμ λ£μΌλ©΄ or μ΄ μλ μ μ©λ¨.
κ°μκ±Έ μ μ μλ€.
λ²μλ₯Ό μ§μ νλ €λ©΄ [] μμ - μ¬μ©
λμλ¬Έμ κ΅¬λΆ μμ΄ μνλ²³ κ²μνλ λ°©λ²
/[A-Za-z]+/g
μ«μλ₯Ό κ²μνλ λ°©λ²
/[0-9]+/g
, κ° ν¬ν¨λ μ«μ 12,345
/[0-9,]+/g
κ°λ¨ν μ¬μ©ν μ μλ κΈ°νΈ
\d === [0-9] | μ«μ |
\D | \d λ₯Ό μ μΈ => λμλ₯Ό μλ―Έ |
\w === [A-Za-z0-9_] | μνλ²³, μ«μ, μΈλμ€μ½μ΄ _ λ₯Ό μλ―Έ |
\W | \w μ λ°λλ‘ λμ. μλ₯Ό μ μΈν λ¬Έμλ₯Ό μλ―Έ |
31.5.5 NOT κ²μ
[...] λ΄μ ^ : not μ μλ―Έλ₯Ό κ°λλ€.
μ«μλ₯Ό μ μΈν λ¬Έμ
[^0-9]
31.5.6 μμ μμΉλ‘ κ²μ
[...] λ°μ ^ λ¬Έμμ΄μ μμμ μλ―Έ
/^ap/
=> 'apple'
31.5.7 λ§μ§λ§ μμΉλ‘ κ²μ
$ μ λ¬Έμμ΄μ λ§μ§λ§μ μλ―Έ.
/com$/
=> 'www.naver.com'
π 31.6 μμ£Ό μ¬μ©νλ μ κ·ννμ
31.6.1 νΉμ λ¨μ΄λ‘ μμνλμ§ κ²μ¬
κ°μ μ½λμ.
/^νΉμ λ¨μ΄/
31.6.2 νΉμ λ¨μ΄λ‘ λλλμ§ κ²μ¬
/νΉμ λ¨μ΄$/
31.6.3 μ«μλ‘λ§ μ΄λ£¨μ΄μ§ λ¬Έμμ΄μΈμ§ κ²μ¬
/^\d+$/
μ²μκ³Ό λμ΄ μ«μμ΄κ³ , μ΅μ νλ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄κ³Ό 맀μΉ.
'12345'
31.6.4 νλ μ΄μμ 곡백μΌλ‘ μμνλμ§ κ²μ¬
/^[\s]+/
\s λ μ¬λ¬κ°μ§ 곡백 λ¬Έμ (μ€νμ΄μ€, ν) μ μλ―Έ.
31.6.5 μμ΄λλ‘ μ¬μ© κ°λ₯νμ§ κ²μ¬
/^[A-Za-z0-9]{4,10}$/
μνλ²³ λμλ¬Έμ λλ μ«μλ‘ μμνκ³ λλλ©°
4-10 μ리μΈμ§ κ²μ¬.
31.6.6 λ©μΌ μ£Όμ νμμ λ§λμ§ κ²μ¬
/^[A-Za-z0-9]([-_\.]?[0-9a-zA-Z])*@[A-Za-z0-9]([-_\.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/
*λ λ°λ³΅μ μλ―Έ. λ°λ‘ μμ μλ λ¬Έμκ° λ¬΄νλλ‘ λ°λ³΅ κ°λ₯
31.6.7 νΈλν° λ²νΈ νμμ΄ λ§λμ§ κ²μ¬
31.6.6 νΉμ λ¬Έμ ν¬ν¨ μ¬λΆ κ²μ¬
μμλ μ κ·μμ΄ κ°λ€.
'λ μ λͺ©λ‘ > λͺ¨λ₯λ€ Modern JS Deep Dive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λͺ¨λ₯λ€] 34μ₯ μ΄ν°λ¬λΈ (0) | 2023.06.01 |
---|---|
[λͺ¨λ₯λ€] 32μ₯ String (0) | 2023.05.29 |
[λͺ¨λ₯λ€] 28μ₯ Number (0) | 2023.05.23 |
[λͺ¨λ₯λ€] 27μ₯ λ°°μ΄ (0) | 2023.05.21 |
[λͺ¨λ₯λ€] 26μ₯ ES6 ν¨μμ μΆκ° κΈ°λ₯ (0) | 2023.05.21 |