Wie überprüft man, ob eine Zeichenfolge "StartsWith" eine andere Zeichenfolge?
Wie würde ich schreiben das äquivalent von C#'s - String.StartsWith
in JavaScript?
var haystack = 'hello world';
var needle = 'he';
//haystack.startsWith(needle) == true
Hinweis: Dies ist eine alte Frage, und wie bereits in den Kommentaren ECMAScript 2015 (ES6) eingeführt, die .startsWith
Methode. Allerdings, die zum Zeitpunkt des Schreibens dieses update (2015) browser-Unterstützung ist bei weitem nicht vollständig.
InformationsquelleAutor der Frage | 2009-03-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Verwendung von ECMAScript 6 ist
- String.der Prototyp.startsWith()
Methode, aber es ist noch nicht in allen Browsern unterstützt. Möchten Sie ein shim verwenden/polyfill hinzufügen, dass es auch auf Browsern, die dies nicht unterstützen. Erstellen Sie eine Implementierung, die erfüllt alle details festgelegt, die in der spec ist ein wenig kompliziert, und die version festgelegt, die in dieser Antwort nicht; wenn Sie möchten, eine treue shim, verwenden Sie entweder:- String.der Prototyp.startsWith
shimoderString.prototype.startsWith
.Sobald Sie shimmed die Methode (oder, wenn Sie nur unterstützende Browser und JavaScript-engines, die bereits haben), können Sie es verwenden, wie diese:
InformationsquelleAutor der Antwort CMS
Andere alternative mit
.lastIndexOf
:Sieht rückwärts durch
haystack
für ein vorkommen vonneedle
ab index0
vonhaystack
. In anderen Worten, es wird nur geprüft, wennhaystack
beginnt mitneedle
.Im Prinzip sollte das performance-Vorteile gegenüber einigen anderen Ansätzen:
haystack
.InformationsquelleAutor der Antwort Mark Byers
InformationsquelleAutor der Antwort cobbal
Ohne eine Hilfsfunktion, die nur mit regex-s
.test
Methode:Dies mit einem dynamischen string, anstatt einen hartcodierten man (unter der Annahme, dass der string nicht enthalten regexp-steuerzeichen):
Sollten Sie sich Gibt es ein RegExp.escape-Funktion in Javascript? wenn die Möglichkeit besteht, dass regexp-control Zeichen in der Zeichenfolge angezeigt werden.
InformationsquelleAutor der Antwort Vincent
Ich wollte nur hinzufügen, meine Meinung über diese.
Ich denke, wir können es einfach verwenden, wie diese:
InformationsquelleAutor der Antwort Mr.D
Beste Lösung:
Und hier ist endsWith wenn Sie das auch:
Für diejenigen, die lieber zu Prototyp in String:
Verwendung:
InformationsquelleAutor der Antwort momo
Hier ist eine kleine Verbesserung zu CMS-Lösung:
Überprüfen, ob die Funktion bereits existiert, im Falle einer zukünftigen browser implementiert es in nativen code, oder wenn es umgesetzt wird, die von einer anderen Bibliothek. Zum Beispiel die Prototype-Bibliothek implementiert diese Funktion bereits.
Mit
!
ist etwas schneller und präziser als=== 0
wenn auch nicht so gut lesbar.InformationsquelleAutor der Antwort
Schauen Sie sich auch underscore.string.js. Es kommt mit einer Reihe von nützlichen string Prüf-und Manipulations-Methoden, einschließlich einen
startsWith
Methode. Aus den docs:InformationsquelleAutor der Antwort studgeek
Vor kurzem habe ich mir die selbe Frage gestellt.
Es gibt mehrere mögliche Lösungen, hier sind 3 gültig:
s.indexOf(starter) === 0
s.substr(0,starter.length) === starter
s.lastIndexOf(starter, 0) === 0
(Hinzugefügt, nachdem er Mark Byers ist Antwort)Verwendung einer Schleife:
War ich noch nicht in die Letzte Lösung, die macht verwendet eine Schleife.
Überraschend ist diese Lösung besser als die ersten 3, die durch eine erhebliche Marge.
Hier ist die jsperf-test, die ich durchgeführt, um diese Aussage zu treffen: http://jsperf.com/startswith2/2
Frieden
ps: ecmascript 6 (harmony) führt ein natives
startsWith
- Methode für strings.Denke nur daran, wie viel Zeit hätte sparen können, wenn Sie gedacht hatte, darunter den dringend benötigten Methode in der ersten version selbst.
Update
Als Steve hingewiesen (der erste Kommentar auf diese Antwort), die über custom-Funktion wirft einen Fehler wenn die angegebene Präfix ist kürzer als der ganze string. Hat er behoben, und fügte hinzu, eine loop-Optimierung, können eingesehen werden unter http://jsperf.com/startswith2/4.
Beachten Sie, dass es 2-loop Optimierungen, die Steve dabei, die erste der beiden zeigten eine bessere Leistung, damit ich post, dass der nachfolgende code:
InformationsquelleAutor der Antwort Raj Nathani
Da dieser so populär ist, ich denke, es ist erwähnenswert, dass es eine Implementierung für diese Methode in ECMA-6-und in der Vorbereitung, sollte man den 'offiziellen' polyfill, um zu verhindern, dass künftige Probleme und Tränen.
Glücklicherweise die Experten von Mozilla stellen uns mit einem:
https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
Bitte beachten Sie, dass dies hat den Vorteil, sich würdevoll ignoriert übergang zu ECMA-6.
InformationsquelleAutor der Antwort Scheintod
Die besten performante Lösung ist zu stoppen, indem Sie auf eine Bibliothek Aufrufe und nur erkennen, dass Sie arbeiten mit zwei arrays. Ein von hand gerollt Umsetzung ist kurz-und auch schneller als jede andere Lösung, die ich hier gesehen.
Für performance-Vergleiche (Erfolg und Misserfolg), siehe http://jsperf.com/startswith2/4. (Stellen Sie sicher, überprüfen Sie Sie für spätere Versionen, die möglicherweise übertrumpft haben meine.)
InformationsquelleAutor der Antwort Steve Hollasch
Ich habe gelernt, über diese string-Bibliothek:
http://stringjs.com/
Gehören die js-Datei und verwenden Sie dann die
S
Variablen wie diese:Es kann auch verwendet werden, in NodeJS installieren:
Dann erfordert es wie die
S
variable:Die web-Seite hat auch links zu alternativen string-Bibliotheken, wenn diese nicht nehmen Ihre Fantasie.
InformationsquelleAutor der Antwort Ashley Davis
InformationsquelleAutor der Antwort Chris
Basiert auf den Antworten hier, das ist die version, die ich verwende jetzt, wie es scheint, zu geben, die beste Leistung basierend auf JSPerf testen (und ist funktional vollständig, soweit ich das sagen kann).
Diese wurde basierend auf startsWith2 von hier: http://jsperf.com/startswith2/6. Ich habe eine kleine änderung für eine kleine performance-Verbesserung, und habe da auch Hinzugefügt eine überprüfung für die Vergleichs-string null oder nicht definiert ist, und konvertiert Sie auf hinzufügen, um die Zeichenkette-Prototyp mit der Technik in die CMS-Antwort.
Beachten Sie, dass diese Implementierung nicht unterstützt, ist die "position" - parameter, die erwähnt wird in diesem Mozilla Developer Network Seite, aber das scheint nicht Teil der ECMAScript-Vorschlag sowieso.
InformationsquelleAutor der Antwort Edward Millen
Ich war auf der Suche nach Leistung, so lief ich die Funktionen durch jsperf. Getestet habe ich die Funktionen gegen Thema und Suchbegriffe in verschiedenen Größen und es scheint, dass alle Methoden weisen unterschiedliche Leistung der verschiedenen Eingänge; das Allgemeine Muster ist, dass sich die Leistung verschlechtert, da die Länge der Suchabfrage erhöht.
Den Gesamtsieger stellt sich heraus, dass die
substr(ing)
Methode.https://jsperf.com/javascript-string-startswith
InformationsquelleAutor der Antwort
Wenn Sie mit
startsWith()
undendsWith()
dann müssen Sie vorsichtig sein, über führende Leerzeichen. Hier ein komplettes Beispiel:InformationsquelleAutor der Antwort Mayank Modi
Sie können sich auch wieder alle Mitglieder ein array mit einem string, indem Sie Ihre eigenen Prototyp /Erweiterung der array-Prototyp, aka
Nehmen und zu nutzen:
InformationsquelleAutor der Antwort Nepaluz