Wie prüfe ich, ob eine Zeichenfolge eine Teilzeichenfolge in Javascript enthält?

Normalerweise würde ich String.contains() erwarten, aber es scheint zu fehlen.

Was ist eine vernünftige Möglichkeit, dies zu überprüfen?

7436
24 нояб. set gramm 24 nov. 2009-11-24 16:04 09 um 16:04 2009-11-24 16:04
@ 49 Antworten
  • 1
  • 2

Hier ist eine Liste der aktuellen Funktionen:

1. (ES6) includes - gehe zur Antwort

 var string = "foo", substring = "oo"; string.includes(substring); 

2. ES5 und älterer indexOf

 var string = "foo", substring = "oo"; string.indexOf(substring) !== -1; 

String.prototype.indexOf gibt die Position einer Zeichenfolge in einer anderen Zeichenfolge zurück. Wenn nicht gefunden, wird -1 .

3. search - zur Antwort gehen

 var string = "foo", expr = /oo/; string.search(expr); 

4. lodash beinhaltet - gehen Sie zur Antwort

 var string = "foo", substring = "oo"; _.includes(string, substring); 

5. RegExp - zur Antwort gehen

 var string = "foo", expr = /oo/; // no quotes here expr.test(string); 

6. Match - zur Antwort gehen

 var string = "foo", expr = /oo/; string.match(expr); 

Leistungstests zeigen, dass indexOf die beste Wahl ist, wenn es auf Geschwindigkeit ankommt.

11502
24 нояб. Die Antwort gibt Fabien Ménager 24. November. 2009-11-24 16:05 09 um 16:05 24.11.2009 um 16:05 Uhr

Sie können die contains Methode mit der folgenden Anweisung leicht zum String hinzufügen:

 String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; 

Hinweis: In den nachfolgenden Kommentaren finden Sie ein gültiges Argument, wenn Sie es nicht verwenden. Mein Rat: Verwenden Sie Ihre eigene Meinung.

border=0

Alternativ:

 if (typeof String.prototype.contains === 'undefined') { String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; } 
823
30 дек. Avi Flachs Antwort ist 30. Dezember 2009-12-30 07:23 '10 um 7:23 Uhr 2009-12-30 07:23

Das Problem mit Ihrem Code ist, dass bei Javascript die Groß- und Kleinschreibung beachtet wird. Methodenaufruf

 indexof() 

muss sein

 indexof() 

Versuchen Sie es zu beheben und sehen Sie, ob es hilft:

 if (test.indexOf("title") !=-1) { alert(elm); foundLinks++; } 
429
24 нояб. Die Antwort wird Victor 24 Nov. gegeben. 2009-11-24 17:17 09 um 17:17 2009-11-24 17:17

Es gibt eine string.includes in ES6 :

 "potato".includes("to"); > true 

Bitte beachten Sie, dass Sie möglicherweise es6-shim oder ähnliches herunterladen es6-shim , damit dies in älteren Browsern funktioniert.

 require('es6-shim') 
361
07 янв. die antwort ist eliocs 07 jan gegeben. 2013-01-07 13:23 '13 am 13:23 2013-01-07 13:23
 var index = haystack.indexOf(needle); 
341
24 нояб. die antwort wird pixeline 24 nov gegeben. 2009-11-24 16:06 09 um 16:06 2009-11-24 16:06

Sie können die JavaScript-Methode search() verwenden.

Syntax: string.search(regexp)

Gibt die Position einer Übereinstimmung zurück oder -1, wenn keine Übereinstimmung gefunden wurde.

Siehe Beispiele: jsref_search

Sie benötigen keine komplexe Syntax für reguläre Ausdrücke. Wenn Sie mit ihnen nicht vertraut sind, wird eine einfache st.search("title") . Wenn Sie möchten, dass Ihr Test zwischen Groß- und Kleinschreibung unterscheidet, müssen Sie st.search(/title/i) .

237
05 марта '10 в 12:53 2010-03-05 12:53 Die Antwort wird von Tardis am 5. März 10 um 12:53 Uhr 2010-03-05 12:53 gegeben

String.prototype.includes() wurde in ES6 eingeführt.

Bestimmt, ob eine Zeichenfolge in einer anderen Zeichenfolge gefunden werden kann, und gibt true bzw. false zurück.

Syntax

 var contained = str.includes(searchString [, position]); 

Parameter

 searchString 

Die Zeichenfolge, nach der in dieser Zeichenfolge gesucht werden soll.

 position 

Die Position in dieser Zeichenfolge, an der Sie die Suchzeichenfolge der Suche starten möchten, standardmäßig 0.

Beispiel

167
21 окт. Antwort von Aniket Kulkarni 21. Oktober 2013-10-21 08:31 '13 um 08:31 Uhr 2013-10-21 08:31

Wenn Sie nach einer Alternative zum Schreiben des Check-ugly-1 gesucht haben, fügen Sie stattdessen eine ~ Tilde hinzu.

 if (~haystack.indexOf('needle')) alert('found'); 

Joe Zimmerman - Sie werden sehen, dass Sie mit ~ on -1 den Wert 0 verwenden. Die Zahl 0 ist falsch, dh sie wird bei der Konvertierung in einen booleschen Wert als falsch berechnet. Zunächst scheint dies nicht sehr stark zu sein. Denken Sie jedoch daran, dass Funktionen wie indexOf -1 zurückgeben, wenn die Abfrage nicht gefunden wird. Das bedeutet, anstatt etwas zu schreiben:

 if (someStr.indexOf("a") >= 0) { // Found it } else { // Not Found } 

Sie können jetzt weniger Zeichen im Code enthalten, so dass Sie beispielsweise schreiben können:

 if (~someStr.indexOf("a")) { // Found it } else { // Not Found } 

Weitere Details hier

120
12 мая '14 в 1:22 2014-05-12 01:22 Die Antwort wird von Christian Landgren am 12. Mai 14 um 01:22 Uhr 2014-05-12 01:22 gegeben

Dieser Teil des Codes sollte gut funktionieren:

 var str="This is testing for javascript search !!!"; if(str.search("for") != -1) { //logic } 
82
29 мая '12 в 10:46 2012-05-29 10:46 Die Antwort wird von Vaibhav am 29. Mai '12 um 10:46 2012-05-29 10:46 gegeben

Die allgemeine Methode zum Erstellen der " contains -Methode in JavaScript :

 if (!String.prototype.contains) { String.prototype.contains = function (arg) { return !!~this.indexOf(arg); }; } 

Der bitweise Negationsoperator ( ~ ) wird verwendet, um -1 in 0 (Falsey) umzuwandeln, und alle anderen Werte sind ungleich Null (True).

Operatoren mit doppelter Boolescher Negation werden verwendet, um Zahlen in logische Zahlen zu übersetzen.

77
13 сент. die antwort wird zzzzBov 13 sep gegeben . 2012-09-13 06:45 '12 at 6:45 am 2012-09-13 06:45

In ES5

76
08 авг. Die Antwort ist Nisar 08 Aug gegeben. 2015-08-08 14:44 '15 um 14:44 Uhr 2015-08-08 14:44 Uhr

Anstelle von Code-Snippets, die hier und dort im Internet zu finden sind, können Sie auch eine bewährte und dokumentierte Bibliothek verwenden. Zwei Optionen, die ich empfehlen würde:


Option 1: Verwenden Sie Lodash : Es includes :

 _.includes('foobar', 'ob'); // → true 

Lodash ist die beliebteste Javascript-Bibliotheksabhängigkeit für npm und hat viele nützliche Javascript-Dienstprogramm-Methoden. Für viele Projekte möchten Sie das immer noch. -)


Die zweite Option: Oder verwenden Sie Underscore.string : Es gibt eine include Methode:

 _.str.include('foobar', 'ob'); // → true 

Hier ist die Beschreibung von Underscore.string, sie fügt lediglich 9kb hinzu, bietet Ihnen jedoch alle Vorteile, die eine bewährte und dokumentierte Bibliothek auf copy'n'paste-Codefragmenten hat:

Underscore.string ist eine JavaScript-Bibliothek zur einfachen Bearbeitung von Strings, eine Erweiterung für Underscore.js, die von Prototype.js, Right.js, Underlining und einer schönen Ruby-Sprache inspiriert ist.

Underscore.string bietet Ihnen mehrere nützliche Funktionen: capize, clean, include, count, escapeHTML, unescapeHTML, insert, splicing, startsWith, endsWith, Header, Trimmen, Beschneiden usw.

Beachten Sie, dass Underscore.string von Underscore.js betroffen ist, aber auch ohne verwendet werden kann.


Zu guter Letzt: Die integrierte includes Methode wird mit der ES6-JavaScript-Version geliefert:

 'foobar'.includes('ob'); // → true 

Die meisten modernen Browser unterstützen dies bereits, beachten Sie die ES6-Kompatibilitätstabelle .

64
13 дек. Die Antwort wird am 13. Dez. gegeben. 2013-12-13 23:05 13 am 23:05 2013-12-13 23:05

Sie können die Option jQuery :contains .

 $("div:contains('John')") 

Hinweis hier: enthält Selector

63
14 марта '11 в 5:10 2011-03-14 05:10 Die Antwort ist gegeben Chorinator 14. März '11 um 5:10 Uhr 2011-03-14 05:10

Verwenden Sie einen regulären Ausdruck:

RegExp.test(string)

61
24 нояб. Die Antwort ist 24 November gegeben. 2009-11-24 16:13 09 um 16:13 2009-11-24 16:13

Es hat einfach für mich funktioniert. Er wählt Zeilen aus, die nicht den Begriff "Gelöscht" enthalten.

 if (eventString.indexOf("Deleted:") == -1) 
49
21 окт. Antwort gegeben Writtinfool 21. Oktober. 2011-10-21 00:50 '11 at 0:50 21.10.2011 00:50

Ein anderer Weg, dies zu tun, ist:

Sie können die Übereinstimmungsfunktion verwenden, d. H.

 x = "teststring"; if (x.match("test")) { // Code } 

match () kann auch mit einem regulären Ausdruck arbeiten:

 x = "teststring"; if (x.match(/test/i)) { // Code } 
49
29 сент. Antwort von David Craig 29. September 2012-09-29 13:40 '12 um 13:40 2012-09-29 13:40

Sie haben nach .indexOf MDN gesucht.

indexOf gibt den Index zurück. Der Index korreliert mit dem Beginn der Teilzeichenfolge. Wenn es keine Übereinstimmung gibt, wird -1 zurückgegeben. Hier ist eine einfache Demonstration dieses Konzepts:

29 авг. Antwort von Travis J 29 Aug. 2013-08-29 02:23 13 am 02:23 2013-08-29 02:23

Sie müssen indexOf wie angegeben mit dem Großbuchstaben "O" aufrufen. Es ist auch zu beachten, dass Sie in einem JavaScript-Klasse-reservierten Wort className verwenden müssen, um dieses Datenattribut abzurufen. Der Grund für das Fehlschlagen ist wahrscheinlich, dass ein Nullwert zurückgegeben wird. Sie können Folgendes tun, um den Wert Ihrer Klasse zu erhalten ...

 var test = elm.getAttribute("className"); //or var test = elm.className 
48
24 нояб. Die Antwort wird von MillsJROSS am 24. November gegeben 2009-11-24 18:52 09 um 18:52 Uhr 2009-11-24 18:52 Uhr

Da die Frage sehr beliebt ist, dachte ich, ich könnte dem Code ein bisschen moderne Note verleihen.

 // const : creates an immutable constant const allLinks = document.getElementsByTagName("a"); // [].reduce.call : gives access to the reduce method on a HTMLCollection // () => {} : ES6 arrow function const foundLinks = [].reduce.call(allLinks, (sum, link) => { // bitwise OR : converts the boolean value to a number return sum + (link.classList.contains("title") | 0); }, 0); // template literal console.log('Found ${foundLinks || "no"} title class'); 

BTW, die richtige Antwort ist falsches indexOf oder nicht standardmäßiges String.contains . Das Laden einer externen Bibliothek (insbesondere wenn der Code in reinem Javascript geschrieben ist) oder das Durcheinander mit String.prototype oder die Verwendung eines regulären Ausdrucks ist etwas zu weit gegangen.

34
27 окт. Antwort von Jay Harris 27. Oktober 2013-10-27 18:53 '13 am 18:53 2013-10-27 18:53

Es gibt einen schlanken und besseren Weg, dies zu tun, und es verwendet den Operator (BitWise NOT).

 if(~"John".indexOf("J")) { alert("Found") } else { alert("Not Found"); } 

Bitwise konvertiert "x" nicht in - (x + 1). Wenn also x aus der Methode indexOf -1 erhalten wird, wird es in - (-1 + 1) = -0 konvertiert. Dies ist ein falscher Wert.

27
07 дек. Die Antwort lautet Kiba 07 Dez. 2014-12-07 14:05 '14 um 14:05 Uhr 2014-12-07 14:05 Uhr

String.prototype.indexOf() oder String.prototype.search() ?!

Wie bereits erwähnt, haben JavaScript-Strings sowohl indexOf als auch search .

Der Hauptunterschied zwischen den beiden ist, dass indexOf nur für einfache indexOf verwendet wird, während die search auch reguläre Ausdrücke unterstützt. Der Vorteil von indexOf ist natürlich, dass es schneller ist.

Siehe auch In JavaScript, was ist der Unterschied zwischen indexOf () und search ()? .

Eigene Methode String.prototype.contains()

Wenn Sie jeder Zeile eine eigene Methode mit enthalten möchten, ist @zzzzBov der beste Weg, dies zu tun :

 if (!String.prototype.contains) { String.prototype.contains = function (arg) { return !!~this.indexOf(arg); }; } 

Sie würden es wie folgt verwenden:

 'Hello World'.contains('orl'); 

Ein benutzerdefiniertes Dienstprogramm implementieren

Es wird normalerweise nicht empfohlen, eigene Methoden zu Standardobjekten in JavaScript hinzuzufügen. Dies kann zum Beispiel die Kompatibilität beeinträchtigen.

Wenn Sie wirklich benötigen, dass Ihre eigene Methode und / oder andere benutzerdefinierte Zeichenfolgenmethoden verwendet werden, ist es besser, eine eigene Dienstprogrammbibliothek zu erstellen und dieser Bibliothek eigene Zeichenkettenmethoden hinzuzufügen:

 var helper = {}; helper.string = { contains : function (haystack, needle) { return !!~haystack.indexOf(needle); }, ... }; 

Sie würden es wie folgt verwenden:

 helper.string.contains('Hello World', 'orl'); 

Verwenden einer Dienstprogrammbibliothek eines Drittanbieters

Wenn Sie keine eigene unterstützende Bibliothek erstellen möchten, besteht natürlich immer die Möglichkeit, eine Dienstprogrammbibliothek eines Drittanbieters zu verwenden. Wie @nachtigall erwähnt wurde, sind Lodash und Underscore.js die beliebtesten.

In Lodash können Sie _.includes() , das Sie wie folgt verwenden:

 _.includes('Hello World', 'orl'); 

In Underscore.js können Sie _.str.include() , das Sie wie folgt verwenden:

 _.str.include('Hello World', 'orl'); 
24
21 февр. Antwort von John Slegers 21 Feb. 2016-02-21 19:52 '16 am 19:52 2016-02-21 19:52

Die einfachste Problemumgehung

 if (!String.prototype.contains) { String.prototype.contains= function() { return String.prototype.indexOf.apply(this, arguments) !== -1; }; } 

Sie können wie folgt verwenden

 "hello".contains("he") // true "hello world".contains("lo w")//true "hello world".contains("lo wa")//false "hello world".contains(" ")//true "hello world".contains(" ")//false 

MDN-Link

23
21 авг. Antwort von Sriramajeyam Sugumaran 21 Aug. 2015-08-21 12:45 '15 um 12:45 Uhr 2015-08-21 12:45
22
08 нояб. Die Antwort wird von user663031 08 Nov. gegeben. 2014-11-08 08:38 14 um 08:38 Uhr 2014-11-08 08:38

Beispiel

 var a = "Test String"; if(a.search("ring")!=-1){ //exist } else { //not found } 
22
12 нояб. Antwort von Ali Abbas am 12. November 2015-11-12 16:11 '15 am 16:11 2015-11-12 16:11

JavaScript-Code für die Verwendung der contains Methode in einem Array:

 <html> <head> <h2>Use of contains() method</h2> <script> Array.prototype.contains = function (element) { for (var i = 0; i < this.length; i++) { if (this[i] == element) { return true; } } return false; } arr1 = ["Rose", "India", "Technologies"]; document.write("The condition is "+arr1.contains("India")+"<br>"); </script> </head> <b>[If the specified element is present in the array, it returns true otherwise returns false.]</b> </html> 

In diesem Code bestimmt die contains Methode, ob das angegebene Element im Array vorhanden ist oder nicht. Wenn das angegebene Element im Array vorhanden ist, wird true zurückgegeben. Andernfalls wird false zurückgegeben.

21
28 февр. Die Antwort gibt Tarun Gupta vom 28. Februar. 2013-02-28 10:50 '13 um 10:50 2013-02-28 10:50

Um einige gültige Lösungen zu sammeln:

19
16 июня '15 в 15:08 2015-06-16 15:08 Die Antwort wird am 16. Juni 15 um 15:08 Uhr 2015-06-16 15:08 gegeben

Da es eine Beschwerde über die Verwendung eines Prototyps gibt und weil der Gebrauch von indexOf den Code weniger lesbar macht und weil regexp voll ist:

 function stringContains(inputString, stringToFind) { return (inputString.indexOf(stringToFind) != -1); } 

Dies ist ein Kompromiss, den ich bekam.

17
22 авг. Die Antwort ist Tjaart 22 aug gegeben. 2013-08-22 14:40 '13 am 14:40 2013-08-22 14:40

Javascript

  var str = "My big string contain apples and oranges"; var n = str.indexOf("apples"); alert(n); //will alert 22, -1 if not found 

Jquery

  <p>My big string contain apples and oranges</p> alert($("p:contains(apples)")[0] != undefined); //will alert true if found 
17
16 дек. Die Antwort wird von Alain Gauthier am 16. Dezember gegeben. 2014-12-16 19:48 14 um 19:48 2014-12-16 19:48

Verwenden Sie den eingebauten und einfachsten String, dh match() im String. Um das zu erreichen, was Sie erwarten, gehen Sie wie folgt vor:

 var stringData ="anyString Data"; var subStringToSearch = "any"; // This will give back the substring if matches and if not returns null var doesContains = stringData.match(subStringToSearch); if(doesContains !=null) { alert("Contains Substring"); } 
13
02 мая '14 в 23:08 2014-05-02 23:08 Die Antwort wird von Ankur Madaan 02 Mai '14 am 23:08 2014-05-02 23:08 gegeben

Der einfachste Weg ist die Verwendung von indexOf . Um einfach die string für den Teilstring substr zu überprüfen, können Sie diese Methode verwenden:

 string = "asdf"; substr = "as"; alert(string.indexOf(substr) == -1 ? false : true); 

Wenn Sie die Funktion string.contains() benötigen, können Sie sie wie folgt selbst implementieren:

 String.prototype.contains = function(test) { return this.indexOf(test) == -1 ? false : true; }; 

Jetzt können Sie diese kürzere Methode verwenden, um zu prüfen, ob eine Zeichenfolge eine spezielle Teilzeichenfolge enthält:

 string = "asdf"; alert(string.contains("as")); 

Hier ist das JSFiddle .

13
27 мая '14 в 15:52 2014-05-27 15:52 Die Antwort gibt frieder am 27. Mai 14 um 15:52 2014-05-27 15:52
  • 1
  • 2