2008-12-09 3 views

Antwort

163

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

+23

ein Hinweis auf diesen Anspruch? – robisrob

+6

Auch "Suche" wird eine Zeichenfolge in eine Regex auswerten, auch wenn Sie nicht möchten. – cregox

+8

@ cregox's Kommentar ist wichtig - probiere '" hallo. ". Search (". ")' - es gibt 0 zurück, nicht 5 wegen '.'ist das Regex-Token für" irgendein Zeichen " – JoeRocc

7

Ich denke, die Hauptunterschied besteht darin, dass die Suche mit regulären Ausdrücken akzeptieren.

prüfen diese Referenz:

12

Die Suchfunktion (one description here) nimmt einen regulären Ausdruck, die Sie gegen anspruchsvollere prasselt, Groß- und Kleinschreibung Strings übereinstimmen erlaubt usw., während indexOf (one description here) einfach eine literale Zeichenfolge abgleicht. Mit indexOf können Sie jedoch auch einen Anfangsindex angeben.

2

Suche findet es mit einem regulären Ausdruck übereinstimmt, aber kein Offsets hat. IndexOf verwendet Literale zur Übereinstimmung, hat aber einen Offset.

IndexOf

Search

+2

Suche * gibt * einen Offset zurück. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search – rvighne

0

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

Das folgende Beispiel gibt 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>

3

IndexOf() - es Stringliterale oder String-Objekte aber nicht reguläre Ausdrücke akzeptiert. Es akzeptiert auch einen Null-basierten ganzzahligen Wert, um seine Suche zu starten, z. B .:

  • "babyelephant" .IndexOf ("e"); // gibt Ihnen 4
  • "babyelephant" .indexOf ("e", 5); // gibt Ihnen 6 als die Suche beginnt von der 6. Position oder 5. Index.
  • var m =/e /; "Babyelefant" .IndexOf (m); // gibt -1, da keine regulären Ausdrücke akzeptiert.
  • Search() - akzeptiert sowohl String-Literale oder String-Objekte als auch reguläre Ausdrücke. Es akzeptiert jedoch keinen Index, mit dem die Suche gestartet werden kann.

    +0

    Was gibt es für "baby/e/lephant" .indexOf (m); '? – RamenChef

    +1

    good one .. es wird zurückkehren 4..because/e/string ist vorhanden..aber wenn Sie eine Regex "e" finden wollen, werden Sie nicht das gewünschte Ergebnis erhalten. UMM vielleicht sollte ich meine Antwort auf indexOf ändern() versucht, die Regex als String-Literal und nicht als Regex zu finden. – bablue