๋ฐ˜์‘ํ˜•

ํฐ ์ˆซ์ž๋ฅผ ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ฒœ ๋‹จ์œ„๋งˆ๋‹ค ์ฝค๋งˆ(,)๊ฐ™์€ ๊ตฌ๋ถ„์ž๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ฒœ ๋‹จ์œ„ ๊ตฌ๋ถ„์€ ํ•œ๊ตญ์„ ํฌํ•จํ•œ ๋งŽ์€ ๊ตญ๊ฐ€์—์„œ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ˆซ์ž ํ‘œ๊ธฐ๋ฒ•์ด๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„  Number.toLocaleString() ํ˜น์€ Intl.NumberFormat ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ตฌ๋ถ„์ž๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์ด ๋ฉ”์„œ๋“œ๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํ–‰ ํ™˜๊ฒฝ์˜ ๋กœ์ผ€์ผ ์„ค์ •์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ผ€์ผ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋…์ผ ๋กœ์ผ€์ผ(de-DE)์€ ์ฒœ ๋‹จ์œ„ ๊ตฌ๋ถ„์ž๋กœ ์˜จ์ (.)์„ ์‚ฌ์šฉํ•˜๊ณ , ์†Œ์ˆ˜์  ๊ตฌ๋ถ„์ž๋กœ ์ฝค๋งˆ(,)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. — ์ฐธ๊ณ  ํฌ์ŠคํŒ…

const number = 123456.789;

// ๋กœ์ผ€์ผ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ ๋กœ์ผ€์ผ(navigator.language)์„ ๋”ฐ๋ฅธ๋‹ค
Intl.NumberFormat().format(number); // '123,456.789'
// ๋ฏธ๊ตญ, ํ•œ๊ตญ ๋“ฑ์˜ ๋‚˜๋ผ๋Š” ์ฒœ ๋‹จ์œ„ ๊ตฌ๋ถ„์ž๋กœ ์ฝค๋งˆ(,)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์†Œ์ˆ˜์  ๊ตฌ๋ถ„์ž๋กœ ์ (.)์„ ์‚ฌ์šฉํ•œ๋‹ค
Intl.NumberFormat("ko-KR").format(number); // '123,456.789'
// ๋…์ผ์€ ์ฒœ ๋‹จ์œ„ ๊ตฌ๋ถ„์ž๋กœ ์ (.)์„ ์‚ฌ์šฉํ•˜๊ณ  ์†Œ์ˆ˜์  ๊ตฌ๋ถ„์ž๋กœ ์ฝค๋งˆ(,)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
Intl.NumberFormat("de-DE").format(number); // '123.456,789'

// ๋กœ์ผ€์ผ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ ๋กœ์ผ€์ผ(navigator.language)์„ ๋”ฐ๋ฅธ๋‹ค
number.toLocaleString(); // '123,456.789'
// ๋ฏธ๊ตญ, ํ•œ๊ตญ ๋“ฑ์˜ ๋‚˜๋ผ๋Š” ์ฒœ ๋‹จ์œ„ ๊ตฌ๋ถ„์ž๋กœ ์ฝค๋งˆ(,)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์†Œ์ˆ˜์  ๊ตฌ๋ถ„์ž๋กœ ์ (.)์„ ์‚ฌ์šฉํ•œ๋‹ค
number.toLocaleString("ko-KR"); // '123,456.789'
// ๋…์ผ์€ ์ฒœ ๋‹จ์œ„ ๊ตฌ๋ถ„์ž๋กœ ์ (.)์„ ์‚ฌ์šฉํ•˜๊ณ  ์†Œ์ˆ˜์  ๊ตฌ๋ถ„์ž๋กœ ์ฝค๋งˆ(,)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
number.toLocaleString("de-DE"); // '123.456,789'

 

ํ•œํŽธ, ์ •๊ทœ์‹์„ ์ด์šฉํ•ด์„œ ์ฒœ ๋‹จ์œ„ ๊ตฌ๋ถ„์ž๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ๋™์ž‘ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๋ ค๋ฉด ๋‹จ์–ด ๊ฒฝ๊ณ„, ์ „๋ฐฉ ํƒ์ƒ‰, ๋ถ€์ • ์ „๋ฐฉ ํƒ์ƒ‰ ๋“ฑ์˜ ๊ฐœ๋…์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์•„๋ž˜ ๋‚ด์šฉ์„ ํ†ตํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.

'1234567'.replace(/\B(?=(\d{3})+(?!\d))/g, ","); // '1,234,567'

 

  • \B : ๋‹จ์–ด ๊ฒฝ๊ณ„๊ฐ€ ์•„๋‹Œ ์œ„์น˜
  • (?=...) : ์ „๋ฐฉ ํƒ์ƒ‰
  • (\d{3})+ : 3๊ฐœ์˜ ์ˆซ์ž๋กœ ์ด๋ค„์ง„ ๊ทธ๋ฃน์ด ํ•œ ๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต
  • (?!...) : ๋ถ€์ • ์ „๋ฐฉ ํƒ์ƒ‰

 

 

๋‹จ์–ด ๊ฒฝ๊ณ„ | Word Boundaries


๐Ÿ’ก ์ฐธ๊ณ  ๋‚ด์šฉ

  • \w ๋‹จ์–ด ๋ฌธ์ž : ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž, ์ˆซ์ž, ์–ธ๋”์Šค์ฝ”์–ด(_)
  • \W ๋น„๋‹จ์–ด ๋ฌธ์ž : ๋‹จ์–ด ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ๋ฌธ์ž (์˜จ์ , ์ฝค๋งˆ, ๊ณต๋ฐฑ ๋“ฑ)

 

\b ๋ฉ”ํƒ€ ๋ฌธ์ž๋Š” ๋‹จ์–ด ๊ฒฝ๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋‹จ์–ด ๋ฌธ์ž(\w)์™€ ๋น„๋‹จ์–ด ๋ฌธ์ž(\W) ์‚ฌ์ด์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ฆ‰, ๋‹จ์–ด์˜ ์‹œ์ž‘์ด๋‚˜ ๋์„ ๋‚˜ํƒ€๋‚ธ๋‹ค(์•ž/๋’ค์— ๋‹ค๋ฅธ ๋‹จ์–ด ๋ฌธ์ž๊ฐ€ ์—†๋Š” ์œ„์น˜). ์˜ˆ๋ฅผ ๋“ค์–ด hello world. ๋ฌธ์ž์—ด์˜ ๋‹จ์–ด ๊ฒฝ๊ณ„๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค(์ˆ˜์ง์„  | ์œผ๋กœ ํ‘œ๊ธฐํ•œ ๊ณณ).

 

 

์•„๋ž˜ ์˜ˆ์‹œ์˜ ์ •๊ทœ์‹์€ \b ๋ฉ”ํƒ€ ๋ฌธ์ž๋ฅผ ์ด์šฉํ•ด cat ์•ž/๋’ค์— ๋‹ค๋ฅธ ๋‹จ์–ด ๋ฌธ์ž๊ฐ€ ์—†๋Š” ์œ„์น˜๋ฅผ ์ฐพ๊ณ  ์žˆ๋‹ค.

const reg = /\bcat\b/;

// cat ์•ž/๋’ค์— ๋‹จ์–ด ๋ฌธ์ž๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋งค์นญ
"I have a cat.".match(reg); // ['cat', index: 9, ...]
// cat ๋’ค์— ๋‹จ์–ด ๋ฌธ์ž๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋งค์นญ ์•ˆ๋จ
"The catalog is here.".match(reg); // null

 

์ฒซ ๋ฒˆ์งธ ๋ฌธ์žฅ I have a cat. ์—์„œ cat ๋’ค์— ์˜จ์ (.)์ด ์žˆ์ง€๋งŒ, ์˜จ์ ์€ ๋‹จ์–ด ๋ฌธ์ž๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋‹จ์–ด ๊ฒฝ๊ณ„๋กœ ๊ฐ„์ฃผํ•œ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ฌธ์žฅ์˜ catalog๋Š” cat ๋’ค์— ๋‹จ์–ด ๋ฌธ์ž a๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋งค์นญ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

๋ฐ˜๋Œ€๋กœ \B ๋ฉ”ํƒ€ ๋ฌธ์ž๋Š” ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋‹จ์–ด ๊ฒฝ๊ณ„๊ฐ€ ์•„๋‹Œ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค. \b ๋‹จ์–ด ๊ฒฝ๊ณ„๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜ ์œ„์น˜๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค.

 

  1. ๋‘ ๋‹จ์–ด ๋ฌธ์ž ์‚ฌ์ด
  2. ๋‘ ๋น„๋‹จ์–ด ๋ฌธ์ž ์‚ฌ์ด
  3. ๋น„๋‹จ์–ด ๋ฌธ์ž์™€ ๋ฌธ์ž์—ด ์‹œ์ž‘/๋ ์‚ฌ์ด

 

hello world. ๋ฌธ์ž์—ด์—์„œ ๋‹จ์–ด ๊ฒฝ๊ณ„๊ฐ€ ์•„๋‹Œ ๊ณณ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค(์ˆ˜์ง์„  | ์œผ๋กœ ํ‘œ๊ธฐํ•œ ๊ณณ).

 

 

์•„๋ž˜ ์˜ˆ์‹œ์˜ ์ •๊ทœ์‹์€ \B ๋ฉ”ํƒ€ ๋ฌธ์ž๋ฅผ ์ด์šฉํ•ด cat ์•ž/๋’ค์— ๋‹ค๋ฅธ ๋‹จ์–ด ๋ฌธ์ž๊ฐ€ ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ฐพ๊ณ  ์žˆ๋‹ค.

const reg = /\Bcat\B/;

// cat ์•ž/๋’ค ๋ชจ๋‘ ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ(๋‹จ์–ด ๊ฒฝ๊ณ„์ด๋ฏ€๋กœ) ๋งค์นญ ์•ˆ๋จ
"I have a cat.".match(reg); // null
// cat ์•ž์ด ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ(๋‹จ์–ด ๊ฒฝ๊ณ„์ด๋ฏ€๋กœ) ๋งค์นญ ์•ˆ๋จ
"The catalog is here.".match(reg); // null
// cat ์•ž/๋’ค ๋ชจ๋‘ ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„์ด๋ฏ€๋กœ(๋‹จ์–ด ๊ฒฝ๊ณ„๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ) ๋งค์นญ
"I have a concatenate.".match(reg); // ['cat', index: 12, ...]

 

 

์ „ํ›„๋ฐฉํƒ์ƒ‰ | Lookaround


์ „ํ›„๋ฐฉํƒ์ƒ‰์€ ํŠน์ • ํŒจํ„ด ์•ž ํ˜น์€ ๋’ค์— ์žˆ๋Š” ํ…์ŠคํŠธ๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ „ํ›„๋ฐฉํƒ์ƒ‰ ๊ตฌ๋ฌธ์—์„œ ๊ด„ํ˜ธ์— ํฌํ•จ๋œ ์‹์€ ๊ฒฐ๊ณผ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š” ์ ์— ์ฃผ์˜ํ•˜์ž(๋งค์นญ ๊ฒฐ๊ณผ์— ํฌํ•จ ์•ˆ๋จ).

 

์ „๋ฐฉ ํƒ์ƒ‰ | Lookahead

$x(?=y)$

 

์ „๋ฐฉ ํƒ์ƒ‰์€ y(ํŒจํ„ด)๊ฐ€ ๋’ค์— ์˜ค๋Š” x๋ฅผ ์ฐพ๋Š”๋‹ค. ์ฆ‰, x ๋’ค์— y๊ฐ€ ์˜ค๋Š” ๊ฒฝ์šฐ์—๋งŒ x์™€ ๋งค์นญํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ •๊ทœ์‹ ์—”์ง„์€ x๋ฅผ ๋จผ์ € ์ฐพ์€ ํ›„, x ๋ฐ”๋กœ ๋’ค์— y ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

์•„๋ž˜ ์˜ˆ์‹œ์—์„  1ํšŒ ์ด์ƒ ๋ฐ˜๋ณต๋˜๋Š” ์ˆซ์ž(\d+)๋ฅผ ์ฐพ์€ ํ›„, ์ˆซ์ž ๋ฐ”๋กœ ๋’ค์— ๊ธฐํ˜ธ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๊ธฐํ˜ธ๊ฐ€ ์žˆ๋‹ค๋ฉด ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋ฏ€๋กœ ํ•ด๋‹น ์ˆซ์ž๊ฐ€ ๋งค์นญ ๊ฒฐ๊ณผ์— ํฌํ•จ๋œ๋‹ค.

// ์ „๋ฐฉ ํƒ์ƒ‰์„ ์ด์šฉํ•˜์—ฌ € ๊ธฐํ˜ธ๊ฐ€ ๋’ค์— ์žˆ๋Š” 1์ž๋ฆฌ ์ด์ƒ์˜ ์ˆซ์ž๋ฅผ ์ฐพ๋Š” ์˜ˆ์‹œ
const str = "1 turkey costs 30€";
str.match(/\d+(?=€)/); // ['30', index: 15, ...]

 

x(?=y)(?=z) ์ฒ˜๋Ÿผ ์ „๋ฐฉ ํƒ์ƒ‰์„ ์—ฐ์†ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ด๋• x ๋’ค์— y,z๊ฐ€ ๋™์‹œ์— ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋งค์นญํ•œ๋‹ค. ์ž‘๋™ ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

  1. x๋ฅผ ์ฐพ๋Š”๋‹ค.
  2. x ๋ฐ”๋กœ ๋’ค์— y๊ฐ€ ์žˆ๋Š”์ง€ ์ฐพ๋Š”๋‹ค.
  3. x ๋ฐ”๋กœ ๋’ค์— z๊ฐ€ ์žˆ๋Š”์ง€ ์ฐพ๋Š”๋‹ค.
  4. 2~3๋ฒˆ ํ…Œ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ํ†ต๊ณผํ•˜๋ฉด x๊ฐ€ ๋งค์นญ๋œ๋‹ค.

 

์•„๋ž˜ ์˜ˆ์‹œ์—์„  1ํšŒ ์ด์ƒ ๋ฐ˜๋ณต๋˜๋Š” ์ˆซ์ž ๋’ค์— ๊ณต๋ฐฑ์ด ์žˆ๊ณ , ๊ทธ ์ดํ›„ ์–ด๋”˜๊ฐ€์— 30์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋งค์นญ๋œ๋‹ค.

const str = "1 turkey costs 30€";
str.match(/\d+(?=\s)(?=.*30)/); // ['1', index: 0, ...]

 

  • ์ฒซ ๋ฒˆ์งธ ์ „๋ฐฉ ํƒ์ƒ‰ : \d+ ๋’ค์— ๊ณต๋ฐฑ(\s)์ด ์žˆ๋Š”์ง€ ํ™•์ธ
  • ๋‘ ๋ฒˆ์งธ ์ „๋ฐฉ ํƒ์ƒ‰ : \d+ ๋’ค์— ์ž„์˜ ๋ฌธ์ž(.)๊ฐ€ 0๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต(*)๋œ ํ›„ 30์ด ์žˆ๋Š”์ง€ ํ™•์ธ

 

๋ถ€์ • ์ „๋ฐฉ ํƒ์ƒ‰ | Negative lookahead

$x(?!y)$

 

๋ถ€์ • ์ „๋ฐฉ ํƒ์ƒ‰์€ y(ํŒจํ„ด)๊ฐ€ ๋’ค์— ์˜ค์ง€ ์•Š๋Š” x๋ฅผ ์ฐพ๋Š”๋‹ค. ์ฆ‰, x ๋’ค์— y๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ x์™€ ๋งค์นญํ•œ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ์—์„  ๊ธฐํ˜ธ๊ฐ€ ๋’ค์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š” 1ํšŒ ์ด์ƒ ๋ฐ˜๋ณต๋˜๋Š” ์ˆซ์ž์™€ ๋งค์นญํ•œ๋‹ค.

const str = "2 turkey costs 60€";
str.match(/\d+(?!€)/); // ['2', index: 0, ...]

 

ํ›„๋ฐฉ ํƒ์ƒ‰ | Lookbehind

์ „๋ฐฉ ํƒ์ƒ‰์ด '๋‹ค์Œ์— ์˜ค๋Š” ๊ฒƒ'์— ๋Œ€ํ•œ ์กฐ๊ฑด์ด์—ˆ๋‹ค๋ฉด, ํ›„๋ฐฉ ํƒ์ƒ‰์€ '์ด์ „์— ์˜จ ๊ฒƒ'์— ๋Œ€ํ•œ ์กฐ๊ฑด์ด๋‹ค. 

 

  • ํ›„๋ฐฉ ํƒ์ƒ‰ : (?<=y)xx ์•ž์— y๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ x์™€ ๋งค์นญ
  • ๋ถ€์ • ํ›„๋ฐฉ ํƒ์ƒ‰ : (?<!y)xx ์•ž์— y๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ x์™€ ๋งค์นญ

 

const str = "2 turkey costs $30";

// ํ›„๋ฐฉ ํƒ์ƒ‰์„ ์ด์šฉํ•ด ๋‹ฌ๋Ÿฌ ๊ธฐํ˜ธ($)๊ฐ€ ์•ž์— ์žˆ๋Š” ์ˆซ์ž์™€ ๋งค์นญ (๊ธˆ์•ก ์ฐพ๊ธฐ)
str.match(/(?<=\$)\d+/); // ['30', index: 16, ...]

// ๋ถ€์ • ํ›„๋ฐฉ ํƒ์ƒ‰์„ ์ด์šฉํ•ด ๋‹ฌ๋Ÿฌ ๊ธฐํ˜ธ($)๊ฐ€ ์•ž์— ์—†๋Š” ์ˆซ์ž์™€ ๋งค์นญ (์ˆ˜๋Ÿ‰ ์ฐพ๊ธฐ)
str.match(/(?<!\$)\d+/); // ['2', index: 0, ...]

 

 

์ฒœ ๋‹จ์œ„ ๊ตฌ๋ถ„์ž ์ •๊ทœ์‹ ๋ถ„์„


์ด์ œ ์œ„ ์ •๊ทœ์‹์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž. x(?=y) ์ „๋ฐฉ ํƒ์ƒ‰์€ y ํŒจํ„ด์ด ๋’ค์— ์˜ค๋Š” x๋ฅผ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„ \B ์œ„์น˜๋ฅผ ์ฐพ๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ ํ›„ ๋ฌธ์ž์—ด ์™ผ์ชฝ์— ์žˆ๋Š” ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„๋ถ€ํ„ฐ 3์ž๋ฆฌ ์ˆซ์ž ๊ทธ๋ฃน์ด 1ํšŒ ์ด์ƒ ๋ฐ˜๋ณต๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

โถ 1234567์˜ ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„(\B)๋ฅผ ์ฐพ๋Š”๋‹ค(์ˆ˜์ง์„  | ์œผ๋กœ ํ‘œ๊ธฐํ•œ ๊ณณ).

 

โท ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„ ๋ฐ”๋กœ ๋’ค๋ถ€ํ„ฐ 3์ž๋ฆฌ ์ˆซ์ž ๊ทธ๋ฃน์ด 1ํšŒ ์ด์ƒ ๋ฐ˜๋ณต๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ...(?!\d) ๋ถ€์ • ์ „๋ฐฉ ํƒ์ƒ‰์€ ๋’ค์— ์ˆซ์ž๊ฐ€ ์—†๋Š” ์œ„์น˜๋ฅผ ์˜๋ฏธํ•˜๋ฏ€๋กœ, ์ •ํ™•ํžˆ 3์ž๋ฆฌ ์ˆซ์ž ๊ทธ๋ฃน์ด ๋ฌธ์ž์—ด ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๋ฐ˜๋ณต๋ผ์•ผ๋งŒ ๋งค์นญ๋œ๋‹ค.

 

  • 1๋ฒˆ์งธ ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„(1๊ณผ 2 ์‚ฌ์ด) 3์ž๋ฆฌ ์ˆซ์ž ๊ทธ๋ฃน : {234}, {567} — โœ…
  • 2๋ฒˆ์งธ ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„(2์™€ 3 ์‚ฌ์ด) 3์ž๋ฆฌ ์ˆซ์ž ๊ทธ๋ฃน : {345}, {67} — โŒ
  • 3๋ฒˆ์งธ ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„(3๊ณผ 4 ์‚ฌ์ด) 3์ž๋ฆฌ ์ˆซ์ž ๊ทธ๋ฃน : {456}, {7} — โŒ
  • 4๋ฒˆ์งธ ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„(4์™€ 5 ์‚ฌ์ด) 3์ž๋ฆฌ ์ˆซ์ž ๊ทธ๋ฃน : {567} — โœ…
  • 5๋ฒˆ์งธ ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„(5์™€ 6 ์‚ฌ์ด) 3์ž๋ฆฌ ์ˆซ์ž ๊ทธ๋ฃน : {67} — โŒ
  • 6๋ฒˆ์งธ ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„(6๊ณผ 7 ์‚ฌ์ด) 3์ž๋ฆฌ ์ˆซ์ž ๊ทธ๋ฃน : {7} — โŒ

 

โธ ๋งค์นญ๋˜๋Š” ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„ ์œ„์น˜(1, 4๋ฒˆ์งธ)์— ์ฝค๋งˆ(,)๋กœ ๊ต์ฒด(์ถ”๊ฐ€)ํ•œ๋‹ค.

 

๋งŒ์•ฝ ...(?!\d) ๋ถ€์ • ์ „๋ฐฉ ํƒ์ƒ‰์„ ์ œ๊ฑฐํ•œ๋‹ค๋ฉด? ์ •๊ทœ์‹์€ ๋” ์ด์ƒ ์ˆซ์ž์˜ ๋์„ ํ™•์ธํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— 3์ž๋ฆฌ ์ˆซ์ž ๊ทธ๋ฃน์ด 1ํšŒ๋งŒ ๋ฐ˜๋ณต๋˜๋ฉด ํ•ญ์ƒ ๋งค์นญ๋œ๋‹ค. ๊ทธ๋Ÿผ 4๋ฒˆ์งธ ๋น„๋‹จ์–ด ๊ฒฝ๊ณ„๊นŒ์ง€ ์ฝค๋งˆ๊ฐ€ ๋ชจ๋‘ ์ถ”๊ฐ€๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

๋ฒˆ์™ธ


replacer ํ•จ์ˆ˜

String.replace(pattern, replacement) ํ•จ์ˆ˜์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž์— replacer ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. replacer ํ•จ์ˆ˜๋Š” ๋งค์นญ๋˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ต์ฒด ์ž‘์—…์„ ๋” ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

function replacer(match, p1, p2, /* ..., */ pN, offset, string, groups) {
  // ...
}

 

  1. match : ๋งค์นญ๋œ ๋ฌธ์ž์—ด
  2. p1, p2, … : ๊ฐ ์บก์ฒ˜ ๊ทธ๋ฃน์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž์—ด (๊ด„ํ˜ธ๋กœ ๊ฐ์‹ผ ๋ถ€๋ถ„)
    ์˜ˆ์‹œ) /(a)|(b)/ ๊ฐ™์€ ์ •๊ทœ์‹์—์„œ (a) ๊ทธ๋ฃน๋งŒ ๋งค์นญ๋  ๊ฒฝ์šฐ p2๋Š” undefined
  3. offset : match ๋ฌธ์ž์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค(์›๋ณธ ๋ฌธ์ž์—ด ๊ธฐ์ค€)
    ์˜ˆ์‹œ) abcd ๋ฌธ์ž์—ด์—์„œ bc๊ฐ€ ๋งค์นญ๋๋‹ค๋ฉด offset์€ 1
  4. string : ์›๋ณธ ๋ฌธ์ž์—ด
  5. groups : ์ด๋ฆ„์ด ์ง€์ •๋œ ์บก์ฒ˜ ๊ทธ๋ฃน์„ ํฌํ•จํ•œ ๊ฐ์ฒด (ES2018์—์„œ ๋„์ž…, ๋ฏธ์ง€์›์‹œ undefined)
    ์˜ˆ์‹œ) /(?<name>a)/ ์ •๊ทœ์‹์—์„œ groups ๊ฐ์ฒด๋Š” { name: 'a' }

 

function replacer(match, p1, p2, p3, offset, string, groups) {
  console.log(match);         // 2024-07-17
  console.log(p1);            // 2024
  console.log(p2);            // 07
  console.log(p3);            // 17
  console.log(offset);        // 26 -> ๋งค์นญ๋œ ๋ถ€๋ถ„์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค
  console.log(string);        // The event is scheduled on 2024-07-17.
  console.log(groups);        // {day: '17'} -> (?<day>\d{2}) ๋ถ€๋ถ„
  return `${p3}/${p2}/${p1}`; // DD/MM/YYYY ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜
}

const str = 'The event is scheduled on 2024-07-17.';
const regex = /(\d{4})-(\d{2})-(?<day>\d{2})/;
const newStr = str.replace(regex, replacer);

console.log(newStr); // 'The event is scheduled on 17/07/2024.'

 

match vs matchAll

match ๋ฉ”์„œ๋“œ์™€ g ํ”Œ๋ž˜๊ทธ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์บก์ฒ˜ ๊ทธ๋ฃน์ด ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค. g ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์บก์ฒ˜ ๊ทธ๋ฃน๋„ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ํฌํ•จํ•˜๋ ค๋ฉด matchAll ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

  • g ํ”Œ๋ž˜๊ทธ ์—†์ด match ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ : [์ตœ์ดˆ ๋งค์นญ ๊ฒฐ๊ณผ, (์ตœ์ดˆ ๋งค์นญ์˜ ์บก์ฒ˜ ๊ทธ๋ฃน)]
  • g ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ match ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ : [๋ชจ๋“  ๋งค์นญ ๊ฒฐ๊ณผ] — ์บก์ฒ˜ ๊ทธ๋ฃน ๋ฏธํฌํ•จ
  • matchAll ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ(g ํ”Œ๋ž˜๊ทธ ํ•„์ˆ˜) : [๋ชจ๋“  ๋งค์นญ ๊ฒฐ๊ณผ, (๊ฐ ๋งค์นญ์˜ ์บก์ฒ˜ ๊ทธ๋ฃน)]

 

const str = "hello1 hello2 hello3";

// g ํ”Œ๋ž˜๊ทธ ์—†์ด match ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
const result1 = str.match(/(hello\d)/);
console.log(result1);
// ["hello1", "hello1"] (์ตœ์ดˆ ๋งค์นญ ๊ฒฐ๊ณผ, ์ตœ์ดˆ ๋งค์นญ์˜ ์บก์ฒ˜ ๊ทธ๋ฃน)

// g ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ match ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
const result2 = str.match(/(hello\d)/g);
console.log(result2);
// ["hello1", "hello2", "hello3"] (๋ชจ๋“  ๋งค์นญ ๊ฒฐ๊ณผ)

// matchAll ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ (matchAll์€ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค)
const result3 = [...str.matchAll(/(hello\d)/g)];
console.log(result3);
/*
[
  ["hello1", "hello1", index: 0, ...], (์ฒซ๋ฒˆ์งธ ๋งค์นญ ๊ฒฐ๊ณผ, ์ฒซ๋ฒˆ์งธ ๋งค์นญ์˜ ์บก์ฒ˜ ๊ทธ๋ฃน)
  ["hello2", "hello2", index: 7, ...], (๋‘๋ฒˆ์งธ ๋งค์นญ ๊ฒฐ๊ณผ, ๋‘๋ฒˆ์งธ ๋งค์นญ์˜ ์บก์ฒ˜ ๊ทธ๋ฃน)
  ["hello3", "hello3", index: 14, ...] (์„ธ๋ฒˆ์งธ ๋งค์นญ ๊ฒฐ๊ณผ, ์„ธ๋ฒˆ์งธ ๋งค์นญ์˜ ์บก์ฒ˜ ๊ทธ๋ฃน)
]
*/

 

 

๋ ˆํผ๋Ÿฐ์Šค


 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•