특정 문자열은 두 가지 방법으로 찾을 수 있다.
let str = "hello";
console.log(str[0]);
// h
console.log(str[-1]);
// o
let str = "hello";
console.log(str.charAt(0);
// h
없는 문자열을 찾으려고 할 때
문자열을 돌면서 한 글자씩 반환할 수 있다.
for 문을 사용하면 된다.
for (let char of "hello") {
console.log(char);
} // h, e, l, l, o
특정 문자열의 위치는 indexOf() 메서드로 찾을 수 있다.
문자열이 시작되는 인덱스 값을 반환한다.
let str = "Widget with id";
console.log(str.indexOf('id')); // 1
console.log(str.indexOf('id', 2)); // 12
let str = "Widget with id";
// ex 1
if (str.indexOf("Widget")) {
console.log("We found it");
}
// ex 2
if (str.indexOf("Widget") != 1) {
console.log("We found it");
}
let str = 'As sly as a fox, as strong as an ox';
let target = 'as'; // let's look for it
// solution 1
let pos = 0;
while (true) {
let foundPos = str.indexOf(target, pos);
if (foundPos == -1) {
break;
} else {
console.log( `Found at ${foundPos}` );
}
pos = foundPos + 1; // continue the search from the next position
}
// solution 2
let pos = -1;
while ((pos = str.indexOf(target, pos + 1)) != -1) {
console.log( `Found at ${foundPos}` );
}
위 코드에 대한 결과물은 아래와 같다.
'Found at 7'
'Found at 17'
'Found at 27'
alert( ~2 ); // -3, the same as -(2+1)
alert( ~1 ); // -2, the same as -(1+1)
alert( ~0 ); // -1, the same as -(0+1)
alert( ~-1 ); // 0, the same as -(-1+1)
if 문과 indexOf() 로 문자열의 존재 여부를 찾을 때 사용할 수 있다.
('~' 없이 쓰면 if 조건문 안의 값이 0 이 되어 아무것도 실행되지 않는다)
let str = "Widget";
if (~str.indexOf("Widget")) {
console.log("Found it!");
} // 'Found it!'
alert( "Widget".includes("id") ); // true
alert( "Widget".includes("id", 3) ); // false, from position 3 there is no "id"
문자열 중 일부를 가져오는 방법에는 3가지가 있다.
헷갈리지 말자! 주로 slice 를 사용한다. 더 유연하기 때문이다.
slice(start [,end])
start 인덱스부터 end 인덱스까지의 문자열을 반환한다. (end 인덱스는 포함하지 않는다) 인자로 음수가 올 수 있다.
substring(start [,end])
start 인덱스부터 end 인덱스까지의 문자열을 반환한다. (end 인덱스는 포함하지 않는다) 인자로 음수가 올 수 없다.(음수를 0으로 취급한다)
substr(start [,length])
start 인덱스부터 length 만큼의 문자열을 반환한다. start 인자로 음수가 올 수 있다.
아래는 slice 와 substring 의 차이
let str = "stringify";
// these are same for substring
alert( str.substring(2, 6) ); // "ring"
alert( str.substring(6, 2) ); // "ring"
// ...but not for slice:
alert( str.slice(2, 6) ); // "ring" (the same)
alert( str.slice(6, 2) ); // "" (an empty string)