Programming/JavaScript

[ JavaScript ] ๋ฌธ์ž์—ด ์ž๋ฅด๊ธฐ: substr() ๐Ÿ†š substring()

seulye 2023. 11. 2. 09:20

 

https://www.daleseo.com/js-substr-substring/

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ์ž์—ด ์ž๋ฅด๊ธฐ: substr()๊ณผ substring() ํ•จ์ˆ˜

Engineering Blog by Dale Seo

www.daleseo.com

๋งจ๋‚  ๋‘˜์ด ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋‚˜.. ์ œ๋Œ€๋กœ ์ตํ˜€๋ณด๊ณ ์ž ์œ„ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ๋‚ด๊ฐ€ ๊ณ„์† ๋ณด๊ณ  ์ฐธ๊ณ ํ•  ๋‚ด์šฉ๋“ค์„ ์˜ฎ๊ฒจ๋ณด์•˜๋‹ค. 

 

substr() ํ•จ์ˆ˜

๋จผ์ € ์‚ดํŽด๋ณผ substr() ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด์˜ ์ผ๋ถ€๋ฅผ ์ผ์ • ๊ธธ์ด๋งŒํผ ์ถ”์ถœํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ์‹œ์ž‘ ์ธ๋ฑ์Šค๋ฅผ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ์ž˜๋ผ๋‚ผ ๊ธธ์ด๋ฅผ ๋„˜๊ธฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

"๋ฌธ์ž์—ด".substr(startIndex, length);
"ABCDEFG".substr(2, 3); // "CDE"
"ABCDEFG".substr(2); // "CDEFG"
"ABCDEFG".substr(); // "ABCDEFG"

// -1์ด ๋์—์„œ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์ด๊ณ , -2๊ฐ€ ๋์—์„œ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€, -n์ด ๋์—์„œ n ๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
"ABCDEFG".substr(-5, 3); //  "CDE"

 

 

substring() ํ•จ์ˆ˜

๋‹ค์Œ์œผ๋กœ ์‚ดํŽด๋ณผ substring() ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด์„ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž๋ฅด๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ์š”. ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฌธ์ž์—ด ๊ธธ์ด ๋Œ€์‹ ์— ์ข…๋ฃŒ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ›๋Š”๋‹ค๋Š” ์ ์—์„œ ์œ„์—์„œ ์‚ดํŽด๋ณธ substr()์™€ ํฐ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

"๋ฌธ์ž์—ด".substring(startIndex, endIndex);
"ABCDEFG".substring(2, 5); // "CDE"
"ABCDEFG".substring(2); // "CDEFG"
"ABCDEFG".substring(); // "ABCDEFG"

// ์Œ์ˆ˜ ์ธ๋ฑ์Šค๋ฅผ ๋„˜๊ธฐ๋ฉด 0์„ ๋„˜๊ธด ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘๋™
"ABCDEFG".substring(-5, 3); //  "ABC"

 

 

substr() vs. substring()

์‹œ์ž‘ ์ธ๋ฑ์Šค์™€ ๊ธธ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž๋ฅด๋Š” substr()์™€ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž๋ฅด๋Š” substring()๋Š” ๋น„์Šทํ•œ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€ ์‚ดํŽด๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๊ณผ ๋™์ž‘ ๋ฐฉ์‹์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์–ด์„œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

substr() ํ•จ์ˆ˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ deprecated, ์ฆ‰ ํ๊ธฐ๋œ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. MDN ๊ด€๋ จ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋ณด์‹œ๋ฉด ์ด์ œ ์“ฐ์ง€ ๋ง๋ผ๊ณ  ๋นจ๊ฐ„์ƒ‰ ๊ธ€์”จ๋กœ ๊ฒฝ๊ณ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

"๋ฌธ์ž์—ด".substr(startIndex, length);
"๋ฌธ์ž์—ด".substring(startIndex, startIndex + length);

 

์ด๋Ÿฌํ•œ ์š”๋ น์„ ์‚ฌ์šฉํ•˜์…”์„œ ๊ฐ€๊ธ‰์  substr()๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋ฅผ substring()์„ ์“ฐ๋„๋ก ๋ฆฌํŽ™ํ† ๋ง(refactoring)ํ•˜์‹œ๊ธฐ๋ฅผ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค. Deprecated๋œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ข‹์„ ์ผ์€ ์—†์œผ๋‹ˆ๊นŒ์š”.

 

๋ณด๋„ˆ์Šค: slice() ํ•จ์ˆ˜

substr()์™€ substring() ๋งŒํผ ํ–‡๊ฐˆ๋ฆฌ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์œ ์‚ฌํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ๋” ์žˆ์–ด์„œ ์งš๊ณ  ๋„˜์–ด๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๋ฐฐ์—ด ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฌธ์ž์—ด์„ ์ƒ๋Œ€๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” slice() ํ•จ์ˆ˜์ธ๋ฐ์š”. ์ด ํ•จ์ˆ˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ์Œ์ˆ˜ ์ธ๋ฑ์Šค๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ์ ์—์„œ๋Š” substr()๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ์ข…๋ฃŒ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ›๋Š”๋‹ค๋Š” ์ ์—์„œ๋Š” substring()๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

"๋ฌธ์ž์—ด".slice(startIndex, endIndex);

 

"ABCDEFG".substr(-5, 3); //  "CDE"
"ABCDEFG".substring(-5, 3); //  "ABC"
"ABCDEFG".slice(-5, 3); // "C"