Überprüfen Sie, ob die Zeichenfolge mit etwas beginnt? [duplicate]

Lesezeit: 5 Minuten

Benutzer-Avatar
n00b0101

Ich weiß, dass ich das kann ^= um zu sehen, ob eine ID mit etwas beginnt, und ich habe versucht, das dafür zu verwenden, aber es hat nicht funktioniert. Im Grunde rufe ich eine URL ab und möchte eine Klasse für ein Element für Pfadnamen festlegen, die auf eine bestimmte Weise beginnen.

Beispiel:

var pathname = window.location.pathname;  //gives me /sub/1/train/yonks/459087

Ich möchte sicherstellen, dass für jeden Pfad, der mit beginnt /sub/1kann ich eine Klasse für ein Element festlegen:

if (pathname ^= '/sub/1') {  //this didn't work... 
        ... 

  • /^\/sub\/1.*$/gi.test(pathname) gibt einen booleschen Wert als Prädikat zurück.

    – Abfahrtski

    23. Juni 2016 um 14:12 Uhr


  • Wenn Sie 6 Jahre später (als ich) hierher kommen, bietet der ursprüngliche und duplizierte Post Javascript StartsWith eine sehr ordentliche Antwort, indem er die Ecmascript 6 startWith() Funktion verwendet, die die beste Leistung zu haben scheint.

    – die Freiheitsbanane

    22. September 2016 um 7:36 Uhr


  • Oder Ausarbeitung von sehr detaillierten Diskussionen über Leistung und Thou shall not modify Objects not owned! – so etwas vielleicht? if (pathname.indexOf('/sub/1') === 0) {//Do.}

    – Der Zinger

    14. November 2018 um 14:21 Uhr

Benutzer-Avatar
Philipp Reynolds

Verwenden stringObject.substring

if (pathname.substring(0, 6) == "/sub/1") {
    // ...
}

  • -1: erzeugt einen zusätzlichen, redundanten String.

    – Benutzer1071136

    17. Januar 2013 um 19:57 Uhr

  • Hier ist ein Testfall dafür: jsperf.com/starts-with/2 . Die Substring-Methode scheint auf meiner Maschine (mit V8) die schnellste zu sein.

    – Pijusn

    20. Juli 2013 um 19:34 Uhr

  • Dies kann so generischer gemacht werden: var x = "/sub/1"; if (pathname.substring(0, x.length) === x) { // ... };. Auf diese Weise sind Sie nicht mehr darauf angewiesen, die Länge zu kennen x wie es sich ändern kann.

    Benutzer843337

    12. Juli 2015 um 11:34 Uhr


  • erstellt eine neue Zeichenfolge, daher ist es nicht ideal. Die beste Methode ist wahrscheinlich die Verwendung von charAt, wenn charAt selbst keine neue Zeichenfolge erstellt 🙂

    – Martijn Scheffer

    20. Juli 2016 um 16:23 Uhr


  • Ich würde sagen, dass es erwähnenswert ist, dass es eine Zeichenfolge erstellt, aber ich denke nicht, dass es sich lohnt, abzustimmen, da es nicht viele eindeutig bessere Alternativen gibt, und ich würde wetten, dass dies in den meisten Fällen die Erstellung einer redundanten Zeichenfolge ist wird kein Problem sein, über das man sich Sorgen machen sollte.

    – robby

    10. Juni 2020 um 8:14 Uhr

Benutzer-Avatar
Ricardo Peres

String.prototype.startsWith = function(needle)
{
    return this.indexOf(needle) === 0;
};

  • -1 Siehe Kommentare hier für einen triftigen Grund, diese Art der Implementierung nicht zu verwenden: stackoverflow.com/a/1978419/560287

    – Johannes Magnolie

    30. März 2013 um 23:46 Uhr


  • Dies ist die perfekte Antwort (indexOf thing) als diejenige, die als Antwort markiert ist.

    – Dilhan Jayathilake

    7. August 2013 um 0:05 Uhr

  • Im Falle von falsehängt die Leistung dieser Funktion von der Länge der Zeichenfolge ab, die Sie überprüfen möchten, was für diesen Anwendungsfall nicht erwartet wird

    – Daniel Alder

    29. Dezember 2014 um 22:03 Uhr

  • Meiner Meinung nach nicht die einzig richtige, aber die richtigste Antwort in Bezug auf Speicherverbrauch und Geschwindigkeit. Und es ist auch lesbar, aber denken Sie daran, keine Objekte zu ändern, die Sie nicht besitzen (oder versuchen Sie einfach, dies zu vermeiden).

    – Florian Leitgeb

    29. Juni 2015 um 13:19 Uhr

  • Dies ist der langsame Weg, der Vergleich wird über die gesamte Zeichenfolge fortgesetzt. Ich würde dies nicht verwenden, wenn diese Methode häufig aufgerufen wird.

    – Martijn Scheffer

    20. Juli 2016 um 16:23 Uhr

Benutzer-Avatar
Kreuz

Sie können verwenden string.match() und auch dafür einen regulären Ausdruck:

if(pathname.match(/^\/sub\/1/)) { // you need to escape the slashes

string.match() gibt andernfalls ein Array übereinstimmender Teilstrings zurück, falls gefunden Null.

  • Gibt es eine Möglichkeit, eine URL-Zeichenfolge dynamisch in den Ausdruck einzufügen? zB Escapezeichen für die /’s in der URL?

    – Tjorriemorrie

    11. Juli 2013 um 13:04 Uhr

  • @Tjorriemorrie Sie können die RegEx-Klasse verwenden, um dies zu erreichen, wie var reUrlTester = new RegEx(your_url_string); if(reUrlTester.test(url)) { // Verwenden Sie die Testfunktion, um zu sehen, ob die URL übereinstimmt.

    – Kreuz

    5. August 2013 um 11:02 Uhr


  • @Cros Err, du hast dort einen Tippfehler gemacht, die Klasse ist eigentlich “RegExp”, also sollte das sein: var matcher = new RegExp(expected);if(matcher.test(actual)){ return true }

    – Kzqai

    19. Dezember 2014 um 18:37 Uhr

  • Das funktioniert zwar, aber vermeiden Sie die Verwendung von RegEx, wenn dies nicht unbedingt erforderlich ist. Es ist einfach eine Tatsache, dass RegEx-Funktionen langsamer sind als ihre äquivalenten wörtlichen Zeichenfolgenfunktionen. Tatsächlich so viel langsamer, dass einige offizielle Dokumentations-Websites Ihnen tatsächlich sagen, dass Sie es nach Möglichkeit vermeiden sollen (ich denke, php.net tut dies zum Beispiel). Ich würde die Lösungen indexOf() oder substr() empfehlen.

    – Byson

    22. Dezember 2014 um 14:59 Uhr

  • match gibt ein Array mit passenden Strings zurück, nicht den passenden String. Sehen developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

    – Trindaz

    29. Januar 2015 um 16:51 Uhr

Benutzer-Avatar
Rob Kohr

Eine etwas mehr wiederverwendbare Funktion:

beginsWith = function(needle, haystack){
    return (haystack.substr(0, needle.length) == needle);
}

Benutzer-Avatar
Tim

Lassen Sie uns zunächst das Zeichenfolgenobjekt erweitern. Dank Ricardo Peres für den Prototypen denke ich, dass die Verwendung der Variablen „string“ besser funktioniert als „needle“, um sie lesbarer zu machen.

String.prototype.beginsWith = function (string) {
    return(this.indexOf(string) === 0);
};

Dann benutzt du es so. Vorsicht! Macht den Code extrem lesbar.

var pathname = window.location.pathname;
if (pathname.beginsWith('/sub/1')) {
    // Do stuff here
}

  • Nicht wirklich etwas hinzuzufügen.

    – ratbum

    11. September 2013 um 8:48 Uhr

  • meiner bescheidenen Meinung nach Index von durchsucht die gesamte Zeichenfolge, wenn am Anfang keine unmittelbare Übereinstimmung gefunden wird: Daher wächst seine Ineffizienz für sehr lange Zeichenfolgen, in denen gesucht werden kann.

    – willy wonka

    8. April 2017 um 0:14 Uhr


Benutzer-Avatar
Willi Menzel

Schau dir JavaScript an substring() Methode.

  • Nicht wirklich etwas hinzuzufügen.

    – ratbum

    11. September 2013 um 8:48 Uhr

  • meiner bescheidenen Meinung nach Index von durchsucht die gesamte Zeichenfolge, wenn am Anfang keine unmittelbare Übereinstimmung gefunden wird: Daher wächst seine Ineffizienz für sehr lange Zeichenfolgen, in denen gesucht werden kann.

    – willy wonka

    8. April 2017 um 0:14 Uhr


1312510cookie-checkÜberprüfen Sie, ob die Zeichenfolge mit etwas beginnt? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy