Was ist der Unterschied zwischen indexOf () und search ()?

180

Da ich in JavaScript ziemlich neu bin, kann ich nicht erkennen, wann ich diese verwenden soll.

Kann mir jemand helfen, das zu klären?

Colin Brock
quelle

Antworten:

211

Wenn Sie einen regulären Ausdruck benötigen, verwenden Sie search(). Sonst indexOf()geht es schneller.

ng.mangine
quelle
31
Gibt es einen Hinweis, der diese Behauptung stützt?
Robisrob
16
Außerdem searchwird eine Zeichenfolge in einen regulären Ausdruck ausgewertet, auch wenn Sie dies nicht möchten.
Cregox
26
@ cregox Kommentar ist wichtig - versuchen Sie "hello.".search(".")- es gibt 0 zurück, nicht 5, weil .das Regex-Token für "jedes Zeichen" ist
34

indexOfsteht für einfache Teilzeichenfolgen, searchsteht für reguläre Ausdrücke.

Greg
quelle
14

Die Suchfunktion ( eine Beschreibung hier ) verwendet einen regulären Ausdruck, mit dem Sie mit komplexeren Mustern, Zeichenfolgen ohne Berücksichtigung der Groß- und Kleinschreibung usw. übereinstimmen können, während indexOf ( eine Beschreibung hier ) einfach mit einer Literalzeichenfolge übereinstimmt. Mit indexOf können Sie jedoch auch einen Anfangsindex angeben.

joel.neely
quelle
7

Ich denke, der Hauptunterschied besteht darin, dass die Suche reguläre Ausdrücke akzeptiert.

Überprüfen Sie diese Referenz:

CMS
quelle
4

IndexOf () - akzeptiert Zeichenfolgenliterale oder Zeichenfolgenobjekte, jedoch keine regulären Ausdrücke. Es akzeptiert auch einen auf Null basierenden ganzzahligen Wert, von dem aus die Suche gestartet werden soll, z.

  1. "babyelephant" .indexOf ("e"); // gibt dir 4
  2. "Babyelephant" .indexOf ("e", 5); // gibt Ihnen 6, wenn die Suche von der 6. Position oder dem 5. Index beginnt.
  3. var m = / e /; "Babyelephant" .indexOf (m); // gibt -1, da es keine regulären Ausdrücke akzeptiert.

Search () - akzeptiert sowohl String-Literale oder String-Objekte als auch reguläre Ausdrücke. Es wird jedoch kein Index akzeptiert, von dem aus die Suche gestartet werden kann.

Bablue
quelle
Wofür kehrt es zurück "baby/e/lephant".indexOf(m);?
RamenChef
1
gut eins .. es wird 4 zurückgeben .. weil / e / string vorhanden ist .. aber wenn Sie einen regulären Ausdruck "e" finden möchten, werden Sie nicht das gewünschte Ergebnis erhalten. UMM Vielleicht sollte ich meine Antwort ändern, damit indexOf () versucht, den regulären Ausdruck als Zeichenfolgenliteral und nicht als regulären Ausdruck zu finden.
Bablue
4

indexOf () und search ()

  • gemeinsam in beiden

    i) das erste Auftreten des gesuchten Werts zurückgeben

    ii) Rückgabe -1, wenn keine Übereinstimmung gefunden wurde

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

  • speziell in indexOf ()

    i) Sie können die Startsuchposition als zweites Argument angeben

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

  • speziell in der Suche ()

Der Suchwert kann ein regulärer Ausdruck sein

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

Referenz

K23raj
quelle
-1

Ohne Regex gibt es keinen praktischen Unterschied zwischen indexOf und search .

Das folgende Beispiel zeigt eine Live- Demo :

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>

Mohammed Zameer
quelle
1
Es gibt einen signifikanten Unterschied: searchKonvertiert eine Zeichenfolge in eine RegExp, so dass sie beispielsweise str.search("d........e");auch mit Zeichen 39
übereinstimmt