Яка різниця між indexOf () та search ()?


180

Будучи досить новим у JavaScript, я не можу розрізнити, коли використовувати кожне з них.

Хтось може допомогти мені прояснити це?

Відповіді:


211

Якщо вам потрібен регулярний вираз, використовуйте search(). Інакше indexOf()буде швидше.


32
будь-яка посилання на підтвердження цієї вимоги?
робісроб

16
Також searchбуде оцінено рядок у регулярний вираз, навіть якщо ви цього не хочете.
Крегокс

26
@ коментар cregox важливий - спробуйте "hello.".search(".")- він повертає 0, а не 5, тому .що маркер regex для "будь-якого персонажа"


14

Функція пошуку ( один опис тут ) приймає регулярний вираз, який дозволяє зіставляти складніші малюнки, рядки, нечутливі до регістру тощо, тоді як indexOf ( один опис тут ) просто відповідає буквальному рядку. Однак indexOf також дозволяє вказати початковий індекс.


7

Я думаю, що головна відмінність полягає в тому, що пошук приймає регулярні вирази.

Перевірте це посилання:


4

IndexOf () - він приймає рядкові літерали або рядкові об'єкти, але не регулярні вирази. Він також приймає ціле число на основі нуля, щоб почати його пошук, наприклад:

  1. "babyelephant" .indexOf ("e"); // дає 4
  2. "babyelephant" .indexOf ("e", 5); // дає вам 6, коли пошук починається з 6-ї позиції або 5-го індексу.
  3. var m = / e /; "babyelephant" .indexOf (m); // дає -1, оскільки він не приймає регулярні вирази.

Пошук () - приймає як рядкові літерали, так і рядкові об'єкти та регулярні вирази. Але він не приймає індекс для запуску пошуку.


За що воно повертається "baby/e/lephant".indexOf(m);?
RamenChef

1
хороший .. він повернеться 4 .. тому що / e / string присутній..але якщо ви хочете знайти регулярний вираз "e", ви не збираєтеся отримати бажаний результат. UMM, можливо, я повинен змінити свою відповідь на indexOf () намагається знайти регулярний вираз як буквальний рядок, а не як регулярний вираз.
bablue

4

indexOf () та пошук ()

  • спільне в обох

    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перетворює рядок у RegExpstr.search("d........e");
формат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.