ํฐ์คํ ๋ฆฌ ๋ทฐ
[JavaScript] String
๊ฐ๋ฐ๊ฐ๊ตด๐ธ 2022. 8. 3. 17:30ํ์ค ๋นํธ์ธ ๊ฐ์ฒด์ธ String์ ์์ ํ์ ์ธ ๋ฌธ์์ด์ ๋ค๋ฃฐ ๋ ์ ์ฉํ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
String ์์ฑ์ ํจ์
String ๊ฐ์ฒด๋ ์์ฑ์ ํจ์ ๊ฐ์ฒด๋ผ new ์ฐ์ฐ์์ ํจ๊ป ํธ์ถํ์ฌ String ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. String ๋ํผ ๊ฐ์ฒด๋ ๋ฐฐ์ด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก length ํ๋กํผํฐ์ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ด๋ ์ซ์๋ฅผ ํ๋กํผํฐ ํค๋ก, ๊ฐ ๋ฌธ์๋ฅผ ํ๋กํผํฐ ๊ฐ์ผ๋ก ๊ฐ์ง๋ฏ๋ก ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด์ ๋๋ค.
// 1. ์ธ์ ์์ด ํธ์ถ
const strObj = new String();
console.log(strObj); // String {length: 0, [[PrimitiveValue]]: ""}
// 2. ์ธ์๋ก ๋ฌธ์์ด ์ ๋ฌ
const strObj = new String('Lee');
console.log(strObj);
// String {0: "L", 1: "e", 2: "e", length: 3, [[PrimitiveValue]]: "Lee"}
console.log(strObj[0]); // L
// ๋ฌธ์์ด์ ์์๊ฐ์ด๋ฏ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ์ด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
strObj[0] = 'S';
console.log(strObj); // 'Lee'
// 3. ๋ฌธ์์ด์ด ์๋ ๊ฐ์ ์ธ์๋ก ์ ๋ฌ
let strObj = new String(123);
console.log(strObj);
// String {0: "1", 1: "2", 2: "3", length: 3, [[PrimitiveValue]]: "123"}
strObj = new String(null);
console.log(strObj);
// String {0: "n", 1: "u", 2: "l", : "l", length: 4, [[PrimitiveValue]]: "null"}
// 4. ๋ช
์์ ํ์
๋ณํ์ ์ด์ฉ
// ์ซ์ ํ์
=> ๋ฌธ์์ด ํ์
String(1); // -> "1"
String(NaN); // -> "NaN"
String(Infinity); // -> "Infinity"
// ๋ถ๋ฆฌ์ธ ํ์
=> ๋ฌธ์์ด ํ์
String(true); // -> "true"
String(false); // -> "false"
- String ์์ฑ์ ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ์ง ์๊ณ new ์ฐ์ฐ์์ ํจ๊ป ํธ์ถํ๋ฉด [[StringData]] ๋ด๋ถ ์ฌ๋กฏ์ ๋น ๋ฌธ์์ด์ ํ ๋นํ String ๋ํผ ๊ฐ์ฒด๋ฅผ ์์ฑ
- String ์์ฑ์ ํจ์์ ์ธ์๋ก ๋ฌธ์์ด์ ์ ๋ฌํ๋ฉด์ new ์ฐ์ฐ์์ ํจ๊ป ํธ์ถํ๋ฉด [[StringData]] ๋ด๋ถ ์ฌ๋กฏ์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ ํ ๋นํ String ๋ํผ ๊ฐ์ฒด๋ฅผ ์์ฑ
- String ๋ํผ ๊ฐ์ฒด๋ ๋ฐฐ์ด๊ณผ ์ ์ฌํ๊ฒ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๋ฌธ์์ ์ ๊ทผ ๊ฐ๋ฅ
- String ์์ฑ์ ํจ์์ ์ธ์๋ก ๋ฌธ์์ด์ด ์๋ ๊ฐ์ ์ ๋ฌํ๋ฉด ์ธ์๋ฅผ ๋ฌธ์์ด๋ก ๊ฐ์ ๋ณํํ ํ, [[StringData]] ๋ด๋ถ ์ฌ๋กฏ์ ๋ณํ๋ ๋ฌธ์์ด์ ํ ๋นํ String ๋ํผ ๊ฐ์ฒด๋ฅผ ์์ฑ
- new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ String ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ช ์์ ์ผ๋ก ํ์ ๋ณํ ๊ฐ๋ฅ
length ํ๋กํผํฐ
length ํ๋กํผํฐ๋ ๋ฌธ์์ด์ ๋ฌธ์ ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค.
'Hello'.length; // -> 5
'์๋
ํ์ธ์!'.length; // -> 6
String ๋ฉ์๋
๋ฐฐ์ด๊ณผ ๋ค๋ฅด๊ฒ String ๊ฐ์ฒด์๋ ์๋ณธ String ๋ํผ ๊ฐ์ฒด๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ ๋ฉ์๋๋ ์กด์ฌํ์ง ์๊ณ ์ธ์ ๋ ์๋ก์ด ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. ๋ฌธ์์ด์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์์ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ String ๋ํผ ๊ฐ์ฒด๋ ์ฝ๊ธฐ ์ ์ฉ ๊ฐ์ฒด๋ก ์ ๊ณต๋ฉ๋๋ค.
const strObj = new String('Lee');
console.log(Object.getOwnPropertyDescriptors(strObj));
/* String ๋ํผ ๊ฐ์ฒด๋ ์ฝ๊ธฐ ์ ์ฉ ๊ฐ์ฒด๋ค. ์ฆ, writable ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ ๊ฐ์ด false๋ค.
{
'0': { value: 'L', writable: false, enumerable: true, configurable: false },
'1': { value: 'e', writable: false, enumerable: true, configurable: false },
'2': { value: 'e', writable: false, enumerable: true, configurable: false },
length: { value: 3, writable: false, enumerable: false, configurable: false }
}
*/
์ฌ์ฉ ๋น๋๊ฐ ๋์ String ๋ฉ์๋์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
String.prototype.indexOf
indexOf ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด(๋ฉ์๋๋ฅผ ํธ์ถํ ๋ฌธ์์ด)์์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ ๊ฒ์ํ์ฌ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๊ณ ๊ฒ์์ ์คํจํ๋ฉด -1์ ๋ฐํํฉ๋๋ค. ๋ํ 2 ๋ฒ์งธ ์ธ์๋ก ๊ฒ์์ ์์ํ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
// 1. ์ธ์ 1๊ฐ ์ ๋ฌ
const str = 'Hello World';
// ๋ฌธ์์ด str์์ 'l'์ ๊ฒ์ํ์ฌ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
str.indexOf('l'); // -> 2
// ๋ฌธ์์ด str์์ 'or'์ ๊ฒ์ํ์ฌ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
str.indexOf('or'); // -> 7
// ๋ฌธ์์ด str์์ 'x'๋ฅผ ๊ฒ์ํ์ฌ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค. ๊ฒ์์ ์คํจํ๋ฉด -1์ ๋ฐํํ๋ค.
str.indexOf('x'); // -> -1
// 2. ๋ ๋ฒ์งธ ์ธ์๋ก ๊ฒ์์ ์์ํ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌ ๊ฐ๋ฅ
// ๋ฌธ์์ด str์ ์ธ๋ฑ์ค 3๋ถํฐ 'l'์ ๊ฒ์ํ์ฌ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
str.indexOf('l', 3); // -> 3
// 3. ํน์ ๋ฌธ์์ด ์กด์ฌ ์ฌ๋ถ ํ์ธ
if (str.indexOf('Hello') !== -1) {
// ๋ฌธ์์ด str์ 'Hello'๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ์ ์ฒ๋ฆฌํ ๋ด์ฉ
}
if (str.includes('Hello')) {
// ๋ฌธ์์ด str์ 'Hello'๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ์ ์ฒ๋ฆฌํ ๋ด์ฉ
}
- ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ ๊ฒ์ํ์ฌ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๊ณ ๊ฒ์์ ์คํจํ๋ฉด -1์ ๋ฐํ
- ๋ ๋ฒ์งธ ์ธ์๋ก ๊ฒ์์ ์์ํ ์ธ๋ฑ์ค ์ ๋ฌ ๊ฐ๋ฅ
- ๋์ ๋ฌธ์์ด์ ํน์ ๋ฌธ์์ด์ด ์กด์ฌํ๋์ง ํ์ธํ ๋ ์ ์ฉํ์ง๋ง includes ๋ฉ์๋๊ฐ ๊ฐ๋ ์ฑ์ด ๋ ์ข์
String.prototype.search
search ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ ๊ท ํํ์๊ณผ ๋งค์นํ๋ ๋ฌธ์์ด์ ๊ฒ์ํ์ฌ ์ผ์นํ๋ ๋ฌธ์์ด์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๊ณ ๊ฒ์์ ์คํจํ๋ฉด -1์ ๋ฐํํฉ๋๋ค.
const str = 'Hello world';
// ๋ฌธ์์ด str์์ ์ ๊ท ํํ์๊ณผ ๋งค์นํ๋ ๋ฌธ์์ด์ ๊ฒ์ํ์ฌ ์ผ์นํ๋ ๋ฌธ์์ด์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
str.search(/o/); // -> 4
str.search(/x/); // -> -1
String.prototype.includes
ES6์์ ๋์ ๋ includes ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ true ๋๋ false๋ก ๋ฐํํฉ๋๋ค. ๋ํ 2 ๋ฒ์งธ ์ธ์๋ก ๊ฒ์์ ์์ํ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
const str = 'Hello world';
str.includes('Hello'); // -> true
str.includes(''); // -> true
str.includes('x'); // -> false
str.includes(); // -> false
// ๋ฌธ์์ด str์ ์ธ๋ฑ์ค 3๋ถํฐ 'l'์ด ํฌํจ๋์ด ์๋์ง ํ์ธ
str.includes('l', 3); // -> true
str.includes('H', 3); // -> false
String.prototype.startsWith
ES6์์ ๋์ ๋ startsWith ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์ด ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด๋ก ์์ํ๋์ง ํ์ธํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ true ๋๋ false๋ก ๋ฐํํฉ๋๋ค. ๋ํ 2๋ฒ์งธ ์ธ์๋ก ๊ฒ์์ ์์ํ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
const str = 'Hello world';
// ๋ฌธ์์ด str์ด 'He'๋ก ์์ํ๋์ง ํ์ธ
str.startsWith('He'); // -> true
// ๋ฌธ์์ด str์ด 'x'๋ก ์์ํ๋์ง ํ์ธ
str.startsWith('x'); // -> false
// ๋ฌธ์์ด str์ ์ธ๋ฑ์ค 5๋ถํฐ ์์ํ๋ ๋ฌธ์์ด์ด ' '๋ก ์์ํ๋์ง ํ์ธ
str.startsWith(' ', 5); // -> true
String.prototype.endsWith
ES6์์ ๋์ ๋ endsWith๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์ด ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด๋ก ๋๋๋์ง ํ์ธํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ true ๋๋ false๋ก ๋ฐํํฉ๋๋ค. ๋ํ 2๋ฒ์งธ ์ธ์๋ก ๊ฒ์์ ์์ํ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
const str = 'Hello world';
// ๋ฌธ์์ด str์ด 'ld'๋ก ๋๋๋์ง ํ์ธ
str.endsWith('ld'); // -> true
// ๋ฌธ์์ด str์ด 'x'๋ก ๋๋๋์ง ํ์ธ
str.endsWith('x'); // -> false
// ๋ฌธ์์ด str์ ์ฒ์๋ถํฐ 5์๋ฆฌ๊น์ง('Hello')๊ฐ 'lo'๋ก ๋๋๋์ง ํ์ธ
str.endsWith('lo', 5); // -> true
String.prototype.charAt
charAt ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ธ๋ฑ์ค์ ์์นํ ๋ฌธ์๋ฅผ ๊ฒ์ํ์ฌ ๋ฐํํฉ๋๋ค. ์ธ๋ฑ์ค๋ ๋ฌธ์์ด ๋ฒ์(0~(๋ฌธ์์ด๊ธธ์ด-1) ์ฌ์ด์ ์ ์)์ฌ์ผ ํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๊ฐ ๋ฌธ์์ด์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ ์์ธ ๊ฒฝ์ฐ ๋น ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
const str = 'Hello';
for (let i = 0; i < str.length; i++) {
console.log(str.charAt(i)); // H e l l o
}
// ์ธ๋ฑ์ค๊ฐ ๋ฌธ์์ด์ ๋ฒ์(0 ~ str.length-1)๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ ๋น๋ฌธ์์ด์ ๋ฐํํ๋ค.
str.charAt(5); // -> ''
*charAt ๋ฉ์๋์ ์ ์ฌํ ๋ฌธ์์ด ๋ฉ์๋๋ String.prototype.charCodeAt๊ณผ String.prototype.codePointAt์ด ์์
String.prototype.substring
substring ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ธ๋ฑ์ค์ ์์นํ๋ ๋ฌธ์๋ถํฐ ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ธ๋ฑ์ค์ ์์นํ๋ ๋ฌธ์์ ๋ฐ๋ก ์ด์ ๋ฌธ์๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
const str = 'Hello World';
// ์ธ๋ฑ์ค 1๋ถํฐ ์ธ๋ฑ์ค 4 ์ด์ ๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
str.substring(1, 4); // -> ell
substring ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์์ต๋๋ค.
- substring ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ์ธ์๋ ๋ ๋ฒ์งธ ์ธ์๋ณด๋ค ์์ ์ ์์ด์ด์ผ ์ ์
- ์ฒซ ๋ฒ์งธ ์ธ์ > ๋ ๋ฒ์งธ ์ธ์์ธ ๊ฒฝ์ฐ ๋ ์ธ์๋ ๊ตํ
- ์ธ์ < 0 ๋๋ NaN์ธ ๊ฒฝ์ฐ 0์ผ๋ก ์ทจ๊ธ
- ์ธ์ > ๋ฌธ์์ด์ ๊ธธ์ด์ธ ๊ฒฝ์ฐ ์ธ์๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ก ์ทจ๊ธ
- indexOf ๋ฉ์๋์ ํจ๊ป ์ฌ์ฉํ๋ฉด ํน์ ๋ฌธ์์ด์ ๊ธฐ์ค์ผ๋ก ์๋ค์ ์์นํ ๋ถ๋ถ ๋ฌธ์์ด์ ์ทจ๋ํ ์ ์์
const str = 'Hello World'; // str.length == 11
// ์ธ๋ฑ์ค 1๋ถํฐ ๋ง์ง๋ง ๋ฌธ์๊น์ง ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
str.substring(1); // -> 'ello World'
// ์ฒซ ๋ฒ์งธ ์ธ์ > ๋ ๋ฒ์งธ ์ธ์์ธ ๊ฒฝ์ฐ ๋ ์ธ์๋ ๊ตํ๋๋ค.
str.substring(4, 1); // -> 'ell'
// ์ธ์ < 0 ๋๋ NaN์ธ ๊ฒฝ์ฐ 0์ผ๋ก ์ทจ๊ธ๋๋ค.
str.substring(-2); // -> 'Hello World'
// ์ธ์ > ๋ฌธ์์ด์ ๊ธธ์ด(str.length)์ธ ๊ฒฝ์ฐ ์ธ์๋ ๋ฌธ์์ด์ ๊ธธ์ด(str.length)์ผ๋ก ์ทจ๊ธ๋๋ค.
str.substring(1, 100); // -> 'ello World'
str.substring(20); // -> ''
// ์คํ์ด์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ ์๋ ๋ถ๋ถ ๋ฌธ์์ด ์ทจ๋
str.substring(0, str.indexOf(' ')); // -> 'Hello'
// ์คํ์ด์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค์ ์๋ ๋ถ๋ถ ๋ฌธ์์ด ์ทจ๋
str.substring(str.indexOf(' ') + 1, str.length); // -> 'World'
String.prototype.slice
slice ๋ฉ์๋๋ substring ๋ฉ์๋์ ๋์ผํ๊ฒ ๋์๋ฉ๋๋ค. ๋จ, slice ๋ฉ์๋๋ ์์์ธ ์ธ์๋ฅผ ์ ๋ฌํ ์ ์๊ณ ์์์ธ ์ธ์๋ฅผ ์ ๋ฌํ๋ฉด ๋์ ๋ฌธ์์ด์ ๊ฐ์ฅ ๋ค์์๋ถํฐ ์์ํ์ฌ ๋ฌธ์์ด์ ์๋ผ๋ด์ด ๋ฐํํฉ๋๋ค.
const str = 'hello world';
// substring๊ณผ slice ๋ฉ์๋๋ ๋์ผํ๊ฒ ๋์ํ๋ค.
// 0๋ฒ์งธ๋ถํฐ 5๋ฒ์งธ ์ด์ ๋ฌธ์๊น์ง ์๋ผ๋ด์ด ๋ฐํ
str.substring(0, 5); // -> 'hello'
str.slice(0, 5); // -> 'hello'
// ์ธ๋ฑ์ค๊ฐ 2์ธ ๋ฌธ์๋ถํฐ ๋ง์ง๋ง ๋ฌธ์๊น์ง ์๋ผ๋ด์ด ๋ฐํ
str.substring(2); // -> 'llo world'
str.slice(2); // -> 'llo world'
// ์ธ์ < 0 ๋๋ NaN์ธ ๊ฒฝ์ฐ 0์ผ๋ก ์ทจ๊ธ๋๋ค.
str.substring(-5); // -> 'hello world'
// slice ๋ฉ์๋๋ ์์์ธ ์ธ์๋ฅผ ์ ๋ฌํ ์ ์๋ค. ๋ค์์ 5์๋ฆฌ๋ฅผ ์๋ผ๋ด์ด ๋ฐํํ๋ค.
str.slice(-5); // โถ 'world'
String.prototype.toUpperCase
toUpperCase ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์ ๋ชจ๋ ๋๋ฌธ์๋ก ๋ณ๊ฒฝํ์ฌ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
const str = 'Hello World!';
str.toUpperCase(); // -> 'HELLO WORLD!'
String.prototype.toLowerCase
toLowerCase ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์ ๋ชจ๋ ์๋ฌธ์๋ก ๋ณ๊ฒฝํ์ฌ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
const str = 'Hello World!';
str.toLowerCase(); // -> 'hello world!'
String.prototype.trim
trim ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด ์๋ค์ ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์์ ๊ฒฝ์ฐ ์ด๋ฅผ ์ ๊ฑฐํ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
// 1. trim
const str = ' foo ';
str.trim(); // -> 'foo'
// 2. trimStart์ trimEnd ํ์ฉ
const str = ' foo ';
// String.prototype.{trimStart,trimEnd} : Proposal stage 4
str.trimStart(); // -> 'foo '
str.trimEnd(); // -> ' foo'
// 3. replace ํ์ฉ
const str = ' foo ';
// ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ์ ๊ท ํํ์์ ๋งค์นํ๋ ๋ฌธ์์ด์ ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ๋ฌธ์์ด๋ก ์นํํ๋ค.
str.replace(/\s/g, ''); // -> 'foo'
str.replace(/^\s+/g, ''); // -> 'foo '
str.replace(/\s+$/g, ''); // -> ' foo'
- stage 4์ ์ ์๋์ด ์๋ String.prototype.trimStart, String.prototype.trimEnd๋ฅผ ํ์ฉํ ์๋ ์์
- String.prototype.replace ๋ฉ์๋์ ์ ๊ท ํํ์์ ์ธ์๋ก ์ ๋ฌํ์ฌ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ ์๋ ์์
String.prototype.repeat
ES6์์ ๋์ ๋ repeat ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ ์๋งํผ ๋ฐ๋ณตํด ์ฐ๊ฒฐํ ์๋ก์ด ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ ์๊ฐ 0์ด๋ฉด ๋น ๋ฌธ์์ด์ ๋ฐํํ๊ณ , ์์์ด๋ฉด RangeError์ ๋ฐ์์ํต๋๋ค. ๋ํ, ์ธ์๋ฅผ ์๋ตํ๋ฉด ๊ธฐ๋ณธ๊ฐ 0์ด ์ค์ ๋ฉ๋๋ค.
const str = 'abc';
str.repeat(); // -> ''
str.repeat(0); // -> ''
str.repeat(1); // -> 'abc'
str.repeat(2); // -> 'abcabc'
str.repeat(2.5); // -> 'abcabc' (2.5 → 2)
str.repeat(-1); // -> RangeError: Invalid count value
String.prototype.replace
replace ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด ๋๋ ์ ๊ทํํ์์ ๊ฒ์ํ์ฌ ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ๋ฌธ์์ด๋ก ์นํํ ๋ฌธ์์ด๋ก ๋ฐํํฉ๋๋ค.
replace ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์์ต๋๋ค.
- ๊ฒ์๋ ๋ฌธ์์ด์ด ์ฌ๋ฟ ์กด์ฌํ ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ๋ก ๊ฒ์๋ ๋ฌธ์์ด๋ง ์นํํจ
- ํน์ํ ๊ต์ฒด ํจํด์ ์ฌ์ฉํ ์ ์์
- replace ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๊ท ํํ์์ ์ ๋ฌํ ์๋ ์์
- replace ๋ฉ์๋์ ๋ ๋ฒ์งธ ์ธ์๋ก ์นํ ํจ์๋ฅผ ์ ๋ฌํ ์๋ ์์
// 1. ์ผ๋ฐ์ ์ธ replace ์ฌ์ฉ
const str = 'Hello world';
// str์์ ์ฒซ ๋ฒ์งธ ์ธ์ 'world'๋ฅผ ๊ฒ์ํ์ฌ ๋ ๋ฒ์งธ ์ธ์ 'Lee'๋ก ์นํํ๋ค.
str.replace('world', 'Lee'); // -> 'Hello Lee'
const str = 'Hello world world';
str.replace('world', 'Lee'); // -> 'Hello Lee world'
// 2. ํน์ํ ๊ต์ฒด ํจํด
const str = 'Hello world';
// ($& => ๊ฒ์๋ ๋ฌธ์์ด)
str.replace('world', '<strong>$&</strong>');
// 3. ์ ๊ท ํํ์ ์ฌ์ฉ
const str = 'Hello Hello';
// 'hello'๋ฅผ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ณํ์ง ์๊ณ ์ ์ญ ๊ฒ์ํ๋ค.
str.replace(/hello/gi, 'Lee'); // -> 'Lee Lee'
// 3. ์นํ ํจ์๋ฅผ ์ฌ์ฉ
// ์นด๋ฉ ์ผ์ด์ค๋ฅผ ์ค๋ค์ดํฌ ์ผ์ด์ค๋ก ๋ณํํ๋ ํจ์
function camelToSnake(camelCase) {
// /.[A-Z]/g๋ ์์์ ํ ๋ฌธ์์ ๋๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ ๋งค์นํ๋ค.
// ์นํ ํจ์์ ์ธ์๋ก ๋งค์น ๊ฒฐ๊ณผ๊ฐ ์ ๋ฌ๋๊ณ , ์นํ ํจ์๊ฐ ๋ฐํํ ๊ฒฐ๊ณผ์ ๋งค์น ๊ฒฐ๊ณผ๋ฅผ ์นํํ๋ค.
return camelCase.replace(/.[A-Z]/g, match => {
console.log(match); // 'oW'
return match[0] + '_' + match[1].toLowerCase();
});
}
const camelCase = 'helloWorld';
camelToSnake(camelCase); // -> 'hello_world'
// ์ค๋ค์ดํฌ ์ผ์ด์ค๋ฅผ ์นด๋ฉ ์ผ์ด์ค๋ก ๋ณํํ๋ ํจ์
function snakeToCamel(snakeCase) {
// /_[a-z]/g๋ _์ ์๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ ๋งค์นํ๋ค.
// ์นํ ํจ์์ ์ธ์๋ก ๋งค์น ๊ฒฐ๊ณผ๊ฐ ์ ๋ฌ๋๊ณ , ์นํ ํจ์๊ฐ ๋ฐํํ ๊ฒฐ๊ณผ์ ๋งค์น ๊ฒฐ๊ณผ๋ฅผ ์นํํ๋ค.
return snakeCase.replace(/_[a-z]]/g, match => {
console.log(match); // '_w'
return match[1].toUpperCase();
});
}
const snakeCase = 'hello_world';
snakeToCamel(snakeCase); // -> 'helloWorld'
String.prototype.split
split ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ๋ฌธ์์ด ๋๋ ์ ๊ท ํํ์์ ๊ฒ์ํ์ฌ ๋ฌธ์์ด์ ๊ตฌ๋ถํ ํ ๋ถ๋ฆฌ๋ ๊ฐ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค.
split ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์์ต๋๋ค.
- ์ธ์๋ก ๋น ๋ฌธ์์ด์ ์ ๋ฌํ๋ฉด ๊ฐ ๋ฌธ์๋ฅผ ๋ชจ๋ ๋ถ๋ฆฌํ์ฌ ๋ฐฐ์ด๋ก ๋ฐํ
- ์ธ์๋ฅผ ์๋ตํ๋ฉด ๋์ ๋ฌธ์์ด ์ ์ฒด๋ฅผ ๋จ์ผ ์์๋ก ํ๋ ๋ฐฐ์ด์ ๋ฐํ
- ๋ ๋ฒ์งธ ์ธ์๋ก ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ์ง์ ํ ์ ์์
- Array.prototype.revers, Array.prototype.join ๋ฉ์๋์ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ฌธ์์ด์ ์ญ์์ผ๋ก ๋ค์ง์ ์ ์์
const str = 'How are you doing?';
// ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ(๋จ์ด๋ก ๊ตฌ๋ถ)ํ์ฌ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค.
str.split(' '); // -> ["How", "are", "you", "doing?"]
// \s๋ ์ฌ๋ฌ ๊ฐ์ง ๊ณต๋ฐฑ ๋ฌธ์(์คํ์ด์ค, ํญ ๋ฑ)๋ฅผ ์๋ฏธํ๋ค. ์ฆ, [\t\r\n\v\f]์ ๊ฐ์ ์๋ฏธ๋ค.
str.split(/\s/); // -> ["How", "are", "you", "doing?"]
// ์ธ์๋ก ๋น ๋ฌธ์์ด์ ์ ๋ฌํ๋ฉด ๊ฐ ๋ฌธ์๋ฅผ ๋ชจ๋ ๋ถ๋ฆฌํ๋ค.
str.split(''); // -> ["H", "o", "w", " ", "a", "r", "e", " ", "y", "o", "u", " ", "d", "o", "i", "n", "g", "?"]
// ์ธ์๋ฅผ ์๋ตํ๋ฉด ๋์ ๋ฌธ์์ด ์ ์ฒด๋ฅผ ๋จ์ผ ์์๋ก ํ๋ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
str.split(); // -> ["How are you doing?"]
// ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค. ๋จ, ๋ฐฐ์ด์ ๊ธธ์ด๋ 3์ด๋ค
str.split(' ', 3); // -> ["How", "are", "you"]
// ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ ์ญ์์ผ๋ก ๋ค์ง๋๋ค.
function reverseString(str) {
return str.split('').reverse().join('');
}
reverseString('Hello world!'); // -> '!dlrow olleH'
[์ถ์ฒ] ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive
'JavaScript > ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ์ดํฐ๋ฌ๋ธ (0) | 2022.08.05 |
---|---|
[JavaScript] 7๋ฒ์งธ ๋ฐ์ดํฐ ํ์ Symbol (0) | 2022.08.05 |
[JavaScript] RegExp (0) | 2022.08.03 |
[JavaScript] Date (0) | 2022.08.02 |
[JavaScript] Math (0) | 2022.08.02 |
- Total
- Today
- Yesterday
- git
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ๋ฐฑ์ค
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- Baekjoon
- http
- ๋ฐฑ์ค node.js
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ์๋ฐ
- ํ๋กํ ์ฝ
- ๋์์ธ ํจํด
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- ํฌํฌ์ธํฐ
- JavaScript
- ์๊ณ ๋ฆฌ์ฆ
- ๋คํธ์ํฌ
- ์ด์์ฒด์
- ์ฝ๋ฉํ ์คํธ
- fp
- ์ ์ญ ๋ณ์
- ํ๋ก๊ทธ๋๋จธ์ค
- ํ๋กํผํฐ
- TDD
- map
- ๋ ์์ปฌ ํ๊ฒฝ
- ์ด๋ถํ์
- ์๋ฐ์คํฌ๋ฆฝํธ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ์นด์นด์ค ์ธํด
- ๋ฐฑ์ค javascript
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |