indexOf ()와 search ()의 차이점은 무엇입니까?


180

JavaScript가 상당히 새롭기 때문에 각각을 언제 사용해야하는지 알 수 없습니다.

누구든지 나를 위해 이것을 명확히 할 수 있습니까?

답변:


211

정규식이 필요한 경우을 사용하십시오 search(). 그렇지 않으면 indexOf()더 빨라질 것입니다.


32
이 주장을 뒷받침하는 참조가 있습니까?
robisrob

16
또한 search원하지 않는 경우에도 문자열을 정규식으로 평가합니다.
cregox

26
@cregox의 설명이 중요합니다-시도 "hello.".search(".")- ."모든 문자"에 대한 정규식 토큰 이므로 5 가 아닌 0을 반환합니다.


14

search 함수 ( 한 설명은 여기 )는 정규 표현식을 사용하여보다 복잡한 패턴, 대소 문자를 구분하지 않는 문자열 등을 비교할 수 있으며 indexOf ( 한 설명은 여기 )는 단순히 리터럴 문자열과 일치합니다. 그러나 indexOf를 사용하면 시작 색인을 지정할 수도 있습니다.


7

주요 차이점은 검색에서 정규 표현식을 허용한다는 것입니다.

이 참조를 확인하십시오.


4

IndexOf ()-문자열 리터럴 또는 문자열 객체는 허용하지만 정규 표현식 은 허용 하지 않습니다 . 또한 0부터 시작하는 정수 값을 받아 검색을 시작합니다. 예 :

  1. "babyelephant".indexOf ( "e"); // 4를 준다
  2. "babyelephant".indexOf ( "e", 5); // 검색이 6 번째 또는 5 번째 인덱스에서 시작하면 6이됩니다.
  3. var m = / e /; "babyelephant".indexOf (m); // 정규식을 허용하지 않으므로 -1을 지정합니다.

Search ()-문자열 리터럴 또는 문자열 객체와 정규식을 모두 허용합니다. 그러나 검색을 시작하는 색인을 허용하지 않습니다.


무엇을 반환 "baby/e/lephant".indexOf(m);합니까?
RamenChef

1
좋은 하나 .. / e / 문자열이 있기 때문에 4 ..를 반환합니다. 그러나 정규식 "e"를 찾으려면 원하는 결과를 얻지 못할 것입니다. UMM 어쩌면 indexOf ()에 대한 대답을 수정해야합니다. 정규 표현식을 정규 표현식이 아닌 문자열 리터럴로 찾으려고합니다.
bablue

4

indexOf () 및 search ()

  • 둘 다 공통

    i) 처음 검색된 값을 반환

    ii) 일치하는 것이 없으면 -1을 반환

    let str='Book is booked for delivery'
    str.indexOf('b')   // returns position 8
    str.search('b')    // returns position 8 

  • indexOf ()의 스페셜

    i) 검색 위치를 두 번째 인수로 지정할 수 있습니다

    str.indexOf('k')   // 3
    str.indexOf('k',4) // 11 (it start search from 4th position) 

  • 검색 특별 ()

검색 값은 정규식 일 수 있습니다

str.search('book') // 8
str.search(/book/i)  // 0   ( /i =case-insensitive   (Book == book)

참고



-1

없이 정규 표현식 사이에 실질적인 차이가 없다 같이 IndexOf검색 .

아래 예제는 라이브 데모 를 제공합니다 .

function FromSearch() {

  var str = document.getElementById("demo").innerText;
  var n = str.search("difference");
  document.getElementById("Location").innerHTML = n;
}

function FromindexOf() {
  var str = document.getElementById("demo").innerText;
  var n = str.indexOf("difference");
  document.getElementById("Location").innerHTML = n;
}
<p id="demo">Without a <a href='http://www.w3schools.com/js/js_regexp.asp'>regex</a>, there is no practical difference between <a href='http://www.w3schools.com/jsref/jsref_indexof.asp'>indexOf</a> and <a href='http://www.w3schools.com/jsref/jsref_search.asp'>search</a>
</p>

<button onclick="FromSearch()">From search</button>

<button onclick="FromindexOf()">From indexOf</button>

<p>Location of difference in the above sentence is:</p>

<mark id="Location"></mark>


1
큰 차이가 있습니다. 예를 들어, search문자열을로 변환하면 문자 39에서도 일치합니다.RegExpstr.search("d........e");
1j01
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.