๐Ÿ“ ๊ฐœ๋ฐœ

Javascript์—์„œ ์ •๊ทœํ‘œํ˜„์‹ 100% ํ™œ์šฉํ•˜๊ธฐ


์ •๊ทœํ‘œํ˜„์‹ Tips

Javascript์—์„œ๋Š” split์ด๋‚˜ replace๊ฐ™์€ ๋ฌธ์ž์—ด ํ•จ์ˆ˜์— ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ๊ฒŒ์‹œ๊ธ€์—์„œ๋Š” ์ œ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์•Œ๊ฒŒ๋œ ์œ ์šฉํ•œ ํŒ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
์ด ๊ธ€์€ ์ •๊ทœํ‘œํ˜„์‹์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ด๋ฏธ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š” ๋…์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์ •๊ทœํ‘œํ˜„์‹์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋ฉด, ์ธํŒŒ๋‹˜์˜ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
์ด ๋ธ”๋กœ๊ทธ์—์„œ ์ •๊ทœํ‘œํ˜„์‹์— ๊ด€ํ•œ ๋‚ด์šฉ์ด ๊นŠ์ด ์žˆ๊ณ  ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ์–ด, ์ •๊ทœํ‘œํ˜„์‹์„ ์ž‘์„ฑํ•  ๋•Œ๋งˆ๋‹ค ์ €๋„ ํ•ญ์ƒ ์ฐธ๊ณ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. https://inpa.tistory.com/entry/JS-๐Ÿ“š-์ •๊ทœ์‹-RegExp-๋ˆ„๊ตฌ๋‚˜-์ดํ•ดํ•˜๊ธฐ-์‰ฝ๊ฒŒ-์ •๋ฆฌ

[Tips 1] split ๊ตฌ๋ถ„์ž๋กœ ์‚ฌ์šฉ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” split ๊ตฌ๋ถ„์ž์— ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. split() ๋ฉ”์„œ๋“œ๋Š” ์ง€์ •ํ•œ ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

const str = 'apple, banana, orange';
const splitArr = str.split(', ');
console.log(splitArr);
// [ 'apple', 'banana', 'orange' ]

์œ„์™€ ๊ฐ™์ด ๊ตฌ๋ถ„์ž๊ฐ€ ๋ช…ํ™•ํ•  ๊ฒฝ์šฐ๋Š” ๋ฌธ์ž์—ด๋งŒ ์‚ฌ์šฉํ•ด๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋ˆ ์•ผ ํ•˜๋Š” ๋ฌธ์ž์—ด์ด โ€˜apple9banana8orange' ๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”?

split ๊ตฌ๋ถ„์ž์— ์ •๊ทœํ‘œํ˜„์‹ ์‚ฌ์šฉํ•˜๊ธฐ

์ด๋Ÿด ๋•Œ ๋ฐ”๋กœ ์ •๊ทœํ‘œํ˜„์‹์„ ๊ตฌ๋ถ„์ž๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

const str = 'apple9banana8orange';
const splitArr = str.split(/\d/);
console.log(splitArr);
// [ 'apple', 'banana', 'orange' ]

split์˜ ๊ตฌ๋ถ„์ž๋กœ ์‚ฌ์šฉํ•œ \d๋Š” ์ˆซ์ž๋ฅผ ๋งค์นญํ•˜๋ผ๋Š” ๋œป์œผ๋กœ [0-9]์™€ ๋™์ผํ•œ ๋งค์นญ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๊ตฌ๋ถ„์ž๋กœ ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ๋ฌธ์ž์—ด๋„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ๋ถ„์ž๋„ split ๊ฒฐ๊ณผ์— ํฌํ•จํ•˜๊ธฐ

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ ๊ตฌ๋ถ„์ž๋„ split๋œ ๋ฐฐ์—ด์— ํฌํ•จํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”? ์ด๋Ÿด ๋• ์ •๊ทœํ‘œํ˜„์‹ ๊ทธ๋ฃนํ™”์™€ ์บก์ณ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๊ทœํ‘œํ˜„์‹์€ ๊ด„ํ˜ธ ์•ˆ์— ์žˆ๋Š” ๋งค์นญ ํŒจํ„ด์„ ์บก์ณ(capturing)ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ด„ํ˜ธ๋กœ ๊ทธ๋ฃนํ™”๋œ ๋ถ€๋ถ„์— ๋งค์น˜๋œ ๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

const str = 'apple9banana8orange';
const splitArr = str.split(/(\d)/);
console.log(splitArr);
// [ 'apple', '9', 'banana', '8', 'orange' ]

์œ„์™€ ๊ฐ™์ด ๋งค์นญ ํŒจํ„ด์„ ๊ด„ํ˜ธ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด ๊ทธ๋ฃนํ™”ํ•œ๋‹ค๋ฉด ์ด๊ฒƒ์ด ์บก์ณ๋ง๋˜๊ณ , split๋œ ๋ฐฐ์—ด์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

[Tips 2] replace ๋งค์นญ ํŒจํ„ด์— ์‚ฌ์šฉํ•˜๊ธฐ

replace์˜ ๋งค์นญ ํŒจํ„ด์œผ๋กœ๋„ ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. replace() ๋ฉ”์„œ๋“œ๋Š” ๋งค์นญ ํŒจํ„ด์— ์ผ์น˜ํ•˜๋Š” ์ผ๋ถ€ ๋˜๋Š” ๋ชจ๋“  ๋ถ€๋ถ„์ด ๊ต์ฒด๋œ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งค์นญ ํŒจํ„ด์€ split์ฒ˜๋Ÿผ ์ผ๋ฐ˜ ๋ฌธ์ž์—ด ํ˜น์€ ์ •๊ทœํ‘œํ˜„์‹์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const str = 'apple, banana, orange';
const replaceStr = str.replaceAll(', ', ' ');
console.log(replaceStr);
// apple banana orange

์œ„์™€ ๊ฐ™์ด ๋งค์นญํ•ด์•ผ ํ•˜๋Š” ํŒจํ„ด์ด ์ผ์ •ํ•œ ๊ฒฝ์šฐ replaceAll์— ๋ฌธ์ž์—ด์„ ๋„ฃ์–ด์„œ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฃจ๋Š” ๋ฌธ์ž์—ด์€ ๋‹จ์ˆœํ•œ ๊ฒƒ ๋ณด๋‹ค ๋ณต์žกํ•œ๊ฒŒ ๋” ๋งŽ์ฃ ๐Ÿ˜ฅ ์ด๋Ÿด ๋• ์ •๊ทœํ‘œํ˜„์‹์„ ๋งค์นญ ํŒจํ„ด์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ •๋ง ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

replace ๋งค์นญ ํŒจํ„ด์œผ๋กœ ์ •๊ทœํ‘œํ˜„์‹ ์‚ฌ์šฉํ•˜๊ธฐ

โ€˜apple1283902banana1238923orangeโ€™์™€ ๊ฐ™์ด ๋ฌธ์ž์—ด๋กœ ๋งค์นญ ํŒจํ„ด์„ ์ง€์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ฌธ์ž์—ด์„ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const str = 'apple1283902banana1238923orange';
const replaceStr = str.replace(/\d/g, ' ');
console.log(replaceStr);
// apple       banana       orange

์—ฌ๊ธฐ์„œ ์ž ๊น!! ์ •๊ทœํ‘œํ˜„์‹ ๋’ค์— ์žˆ๋Š” g๋ผ๋Š” ๋ฌธ์ž์—ด์€ ๋ฌด์—‡์ผ๊นŒ์š”? ์ด๊ฒƒ์€ ์ •๊ทœ์‹ ํ”Œ๋ž˜๊ทธ๋ผ๋Š” ๊ฒƒ์œผ๋กœ g๋Š” ๋ฌธ์ž์—ด ๋‚ด์˜ ๋ชจ๋“  ํŒจํ„ด์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋งŒ์•ฝ gํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋งค์นญ๋œ ๋งจ ์•ž ๋ฌธ์ž์—ด๋งŒ ๊ต์ฒดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ต์ฒดํ•  ๋ฌธ์ž์—ด ํ•จ์ˆ˜๋กœ ๋„˜๊ฒจ์ฃผ๊ธฐ

๊ทธ๋Ÿฐ๋ฐ ์œ„์˜ replaceStr ์•ฝ๊ฐ„ ๋ถˆํŽธํ•˜์ง€ ์•Š๋‚˜์š”โ€ฆ? apple banana orange ์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ๊ณต๋ฐฑ๋งŒ ์žˆ์œผ๋ฉด ์ข‹์„ํ…๋ฐ ๊ต์ฒด๋˜๊ธฐ ์ „ ์ˆซ์ž์˜ ๊ธธ์ด๋งŒํผ ๊ณต๋ฐฑ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”?

const str = 'apple1283902banana1238923orange';
const replacer = (match, offset, string) => {
    if(string[offset + 1].match(/\d/)){
        return '';
    }else{
        return ' ';
    }
}
const replaceStr = str.replace(/\d/g, replacer);
console.log(replaceStr);
// apple banana orange

์œ„์˜ ์ฝ”๋“œ์—์„œ ๋ณด๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๊ต์ฒด๋  ๋ฌธ์ž์—ด์„ ํ•จ์ˆ˜ ํ˜•ํƒœ๋กœ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. replace๋Š” ๊ต์ฒด๋  ๋ฌธ์ž์—ด์ด ํ•จ์ˆ˜ ํ˜•ํƒœ๋กœ ๋„˜๊ฒจ์กŒ์„ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

(์•„๋ž˜ ํ‘œ๋Š” mdn replace ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.)

๊ฐ€๋Šฅํ•œ ์ด๋ฆ„์ œ๊ณต๋˜๋Š” ๊ฐ’
match๋งค์น˜๋œ ๋ฌธ์ž์—ด.
p1, p2, ...์ด ๋ถ€๋ถ„์€ ์•„๋ž˜์ชฝ์—์„œ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
offset๋งค์นญ๋œ ๋ฌธ์ž์—ด์˜ ์ธ๋ฑ์Šค
string์กฐ์‚ฌ๋œ ์ „์ฒด ๋ฌธ์ž์—ด (replace๋ฅผ ํ˜ธ์ถœํ•œย string)

๋”ฐ๋ผ์„œ replacer์—์„œ match, offset, string์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„, ํ˜„์žฌ ๋งค์นญ๋œ ๋ฌธ์ž์—ด์˜ ๋‹ค์Œ ๋ฌธ์ž๊ฐ€ ์ˆซ์ž๋ผ๋ฉด ๊ณต๋ฐฑ ์—†๋Š” ๋ฌธ์ž์—ด โ€˜โ€™์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ณต๋ฐฑ์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๊ตฌํ˜„ํ•ด์„œ, ์—ฐ์†๋˜๋Š” ๊ณต๋ฐฑ์„ ํ•˜๋‚˜๋กœ ์ค„์˜€์Šต๋‹ˆ๋‹ค.

const replaceStr = str.replace(/\d/g, (match,offset, string)=>string[offset + 1].match(/\d/) ? '':' ');

์œ„์™€ ๊ฐ™์ด ๋‹จ์ˆœํ•œ ํ‘œํ˜„๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

[Tips 3] replace์—์„œ ์บก์ณ๋œ ๋ฌธ์ž์—ด ๊ฐ€์ ธ์˜ค๊ธฐ

์œ„์—์„œ p1, p2, ... ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์–ธ๊ธ‰์„ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฐ”๋กœ ๊ทธ๋ฃนํ™”ํ•œ ๋ฌธ์ž์—ด์„ ์ฐจ๋ก€๋Œ€๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฃนํ™”๋ฅผ ์•Œ์ง€ ๋ชปํ•˜์‹œ๋Š” ๋ถ„๋“ค์€ ์ผ๋‹จ์€ ๊ทธ๋ฃนํ™” === ๊ด„ํ˜ธ๋กœ ๋ฌถ์€ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์ฃผ์„ธ์š”!!

const str = 'apple1283902banana1238923orange';
const replacer = (match, p1, p2) => {
    return ' '+p2;
}
const replaceStr = str.replace(/(\d)+([a-zA-z])/g, replacer);
console.log(replaceStr);

๊ฐ‘์ž๊ธฐ ์—„์ฒญ ๊ธด ์ •๊ทœํ‘œํ˜„์‹์ด ๋“ฑ์žฅํ•ด์„œ ๋‹นํ™ฉ์Šค๋Ÿฌ์šธ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์„ค๋ช…์„ ๋“ฃ๊ณ  ๋‚˜๋ฉด ๊ทธ๋‹ค์ง€ ๋ณต์žกํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ž€ ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์‹ค๊ฒ๋‹ˆ๋‹ค๐Ÿ˜Š

(\d)+๋Š” ์ˆซ์ž์ด๋ฉด์„œ ํ•˜๋‚˜ ํ˜น์€ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์—ฐ์†๋œ ๋ฌธ์ž์—ด์„ ๋งค์นญํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ([a-zA-z])๋Š” ์•ŒํŒŒ๋ฒณ ๋ฌธ์ž์—ด์„ ๋งค์นญํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋‘๊ฐœ๋ฅผ ์ด์œผ๋ฉด ์ˆซ์ž ์—ฌ๋Ÿฌ๊ฐœ+์•ŒํŒŒ๋ฒณ ํ•˜๋‚˜์™€ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ์ฐพ๋Š” ๊ฒƒ์ธ๋ฐ์š”. ์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” โ€˜1283902bโ€™ โ€˜1238923oโ€™์ด ์ด๊ณณ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•„๊นŒ ์„ค๋ช…ํ–ˆ๋“ฏ์ด ๊ด„ํ˜ธ๋กœ ๋ฌถ์œผ๋ฉด ๊ทธ๋ฃนํ™”๊ฐ€ ๋˜๊ณ , ๊ทธ๋ฃนํ™”๋œ ๋ฌธ์ž๋“ค์€ p1, p2, ... ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋„˜์–ด์˜จ๋‹ค๊ณ  ํ–ˆ์ฃ ? ์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” p1์— ๋งค์นญ๋œ ์ˆซ์ž๊ฐ€ ๋“ค์–ด์˜ค๊ณ , p2์— ๋งค์นญ๋œ ๋ฌธ์ž๊ฐ€ ๋“ค์–ด์˜ต๋‹ˆ๋‹ค. apple1283902banana ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ํ•˜๋ฉด p1 === 1283902 p2 === b ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ relacer ํ•จ์ˆ˜์—์„œ return ' '+p2; ๋ฅผ ๋ฐ˜ํ™˜ํ•œ ๊ฒƒ์€ ๋งค์นญ๋œ โ€˜1283902bโ€™ โ€˜1238923oโ€™๋ฅผ ๊ณต๋ฐฑ + ๋‹จ์–ด ์•ž๊ธ€์ž๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฉ๋‹ˆ๋‹ค. ์•„๊นŒ๋ณด๋‹ค ๋” ๋‹จ์ˆœํ•˜๊ฒŒ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ณต๋ฐฑ์„ ํ•˜๋‚˜๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์ฃ .

[Tips 4] ์ •๊ทœํ‘œํ˜„์‹ ์•ˆ์— ๋ณ€์ˆ˜ ๋„ฃ๊ธฐ

๊ฐ„ํ˜น๊ฐ€๋‹ค ๋Ÿฐํƒ€์ž„ ์ƒ์—์„œ ๋™์ ์œผ๋กœ ์ •๊ทœํ‘œํ˜„์‹์„ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด ๋• RegExp ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€์ˆ˜ ์•ˆ์— ์žˆ๋Š” ๊ฐ’์œผ๋กœ ์ •๊ทœํ‘œํ˜„์‹์„ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

const names = ['milk717','sumin','minsu'];
const str = 'My name is sumin';
const regExp = new RegExp(`/${names.join('|')}/`);
 
console.log(str.match(regExp)) //[ 'sumin', index: 11, input: 'My name is sumin', groups: undefined ]

์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ํ•„์š”ํ•œ ๋‹จ์–ด๋“ค์„ ๋ฐฐ์—ด์— ๋„ฃ์–ด๋†“๊ณ , ๊ทธ ๋‹จ์–ด๋“ค์„ ์ •๊ทœํ‘œํ˜„์‹์—์„œ OR ์—ฐ์‚ฐ์ž์— ํ•ด๋‹นํ•˜๋Š” |๋กœ joinํ•œ๋‹ค๋ฉด /CON|PRN|NUL|โ€ฆ./๊ณผ ๊ฐ™์ด ํ•˜๋‚˜ํ•˜๋‚˜ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  ์ •๊ทœํ‘œํ˜„์‹์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๊ทœํ‘œํ˜„์‹ ๊ทธ๋ฃนํ™”์™€ ์บก์ณ

์ •๊ทœํ‘œํ˜„์‹ ๊ทธ๋ฃนํ™”์™€ ์บก์ณ๋Š” ์ •๊ทœํ‘œํ˜„์‹์—์„œ ํŠน์ • ๋ถ€๋ถ„์„ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ๊ณ , ํ•ด๋‹น ๊ทธ๋ฃน์— ๋งค์น˜๋˜๋Š” ๋ถ€๋ถ„์„ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฃนํ™”

ํŒจํ„ด์„ ๊ทธ๋ฃนํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ด„ํ˜ธ๋กœ ๊ทธ๋ฃนํ™”๋œ ๋ฐฐํ„ด์€ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฃนํ™”๊ฐ€ ์ ์šฉ๋œ ๊ฒฝ์šฐ

์ด๋ ‡๊ฒŒ ๊ทธ๋ฃนํ™”ํ•œ ํŒจํ„ด์€ ํ•˜๋‚˜์˜ ๋‹จ์œ„์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์œ„์˜ ์˜ˆ์‹œ์—์„œ ๊ทธ๋ฃนํ™”๊ฐ€ ์—†๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋˜์—ˆ์„๊นŒ์š”?

๊ทธ๋ฃนํ™”๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ

๊ทธ๋ฃนํ™”๊ฐ€ ์—†์—ˆ๋‹ค๋ฉด abc๊ฐ€ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ์ทจ๊ธ‰๋˜์ง€ ์•Š๊ณ , ๊ฐ์ž ๋”ฐ๋กœ๋”ฐ๋กœ ๋ถ„๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— c ๋‹จ์–ด๋งŒ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌ ๋ผ์„œ abcccc๋ผ๋Š” ๋ฌธ์ž๋„ ๋งค์นญ๋ฉ๋‹ˆ๋‹ค.

์บก์ณ๋ง

๊ด„ํ˜ธ๋กœ ๊ทธ๋ฃนํ™”ํ•œ ํŒจํ„ด์€ ์บก์ณ๋ง ๋ฉ๋‹ˆ๋‹ค. ์บก์ณ๋ง๋œ๋‹ค๋Š” ๊ฒƒ์€ ๊ด„ํ˜ธ ์•ˆ์— ์žˆ๋Š” ํŒจํ„ด์œผ๋กœ ๋งค์น˜๋˜๋Š” ํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” match๋‚˜ replace๋ฅผ ํ†ตํ•ด ์บก์ณ๋œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์žฅ์—์„œ yyyy-mm-dd์˜ ๋‚ ์งœ๋ฅผ ์ถ”์ถœํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๊ทธ๋ฃนํ™”์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

const str = '๋‚ด ์ƒ์ผ์€ 2001-07-17';
const matchRes = str.match(/(\d{4})-(\d{2})-(\d{2})/);
/*
 [
  '2001-07-17',
  '2001',
  '07',
  '17',
  index: 6,
  input: '๋‚ด ์ƒ์ผ์€ 2001-07-17',
  groups: undefined
]
 */

match์˜ ๊ฒฐ๊ณผ๊ฐ’์€ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜๋˜๋Š”๋ฐ, ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์—๋Š” ๋งค์นญ๋œ ๋ฌธ์ž์—ด์ด ์˜ค๊ณ , ๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๊ทธ๋ฃน๋ณ„ ์บก์ณ๋ง๋œ ๊ฐ’์ด ๋“ค์–ด์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ทธ๋ฃนํ™”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  yyyy-mm-dd๋ฅผ ์ถ”์ถœํ•œ๋‹ค๋ฉด match ๊ฒฐ๊ณผ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

const str = '๋‚ด ์ƒ์ผ์€ 2001-07-17';
const matchRes = str.match(/\d{4}-\d{2}-\d{2}/);
console.log(matchRes)
/*
  '2001-07-17',
  index: 6,
  input: '๋‚ด ์ƒ์ผ์€ 2001-07-17',
  groups: undefined
]
 */

๊ฒฐ๊ณผ๋Š” ์œ„์™€ ๊ฐ™์ด ๋ณ€ํ•ฉ๋‹ˆ๋‹ค. ์ถ”์ถœ๋œ yyyy-mm-ddํ˜•์‹์—์„œ ๋…„, ์›”, ์ผ์„ ๋”ฐ๋กœ ํ™œ์šฉํ•ด์•ผ ํ•  ์ผ์ด ์žˆ๋‹ค๋ฉด ๊ทธ๋ฃนํ™”์™€ ์บก์ณ๋ง์ด ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฃนํ™” ํŒจํ„ด ์˜ˆ์ œ

๋‹ค์Œ์€ ๊ทธ๋ฃนํ™”๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ •๊ทœํ‘œํ˜„์‹ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ณผ์ œ์—์„œ ์ œ๊ฐ€ (?=A)A|B ๋ฅผ ์‚ฌ์šฉํ•ด ํŒŒ์ผ๋ช…๊ณผ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ช…์„ ํ•œ๋ฒˆ์— ํƒ์ƒ‰ํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜, ์ด๋ฆ„์— ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ ์ถ”์ถœํ•˜์ง€ ๋ชปํ•ด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹คใ…œ ํ˜น์‹œ path์—์„œ name์„ ์ถ”์ถœํ•˜๋Š” ๋ถ€๋ถ„์„ ํ•˜๋‚˜์˜ ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•œ ์ •๊ทœํ‘œํ˜„์‹ ๊ณ ์ˆ˜๋‹˜์ด ๊ณ„์‹ ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”!

  • (A)?B : A์กฐ๊ฑด์˜ ๋ฌธ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ B์กฐ๊ฑด์œผ๋กœ ํƒ์ƒ‰
  • (A)*B : A์กฐ๊ฑด์˜ ๋ฌธ์ž๊ฐ€ ์—†๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ B์กฐ๊ฑด์œผ๋กœ ํƒ์ƒ‰
  • (?=A)A|B: A์กฐ๊ฑด์œผ๋กœ ์šฐ์„  ํƒ์ƒ‰ํ•˜๊ณ , A์กฐ๊ฑด์ด ํƒ์ƒ‰๋˜๋ฉด ํƒ์ƒ‰ ๋ฉˆ์ถค. A์กฐ๊ฑด์ด ํƒ์ƒ‰๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด B์กฐ๊ฑด์œผ๋กœ ํƒ์ƒ‰

์ฐธ๊ณ  ๋ฌธ์„œ

Javascript์—์„œ ์ •๊ทœํ‘œํ˜„์‹ 100% ํ™œ์šฉํ•˜๊ธฐ