253 Stimmen

Schnellste Weg, um eine Zeichenfolge enthalten eine andere Teilzeichenfolge in JavaScript überprüfen?

Ich arbeite mit einem Leistungsproblem bei JavaScript. Deshalb möchte ich fragen: Was ist der schnellste Weg, um zu prüfen, ob eine Zeichenfolge eine andere Teilzeichenfolge enthält (ich brauche nur den booleschen Wert)? Könnten Sie bitte vorschlagen, Ihre Idee und Beispiel-Code snippet?

0 Stimmen

Fragen Sie nach einer festen Teilzeichenkette, oder benötigen Sie einen regulären Ausdruck (ich bin etwas verwirrt durch die Verwendung der regex Tag)?

1 Stimmen

1 Stimmen

Wie wäre es, die Zeichenkette in ein Array um Leerzeichen herum aufzuteilen und eine Array-Kreuzung durchzuführen? stackoverflow.com/questions/1885557/

5voto

Anton Danilchenko Punkte 2291

Es ist eine einfache Art zu verwenden .match() Methode zu string.

var re = /(AND|OR|MAYBE)/;
var str = "IT'S MAYBE BETTER WAY TO USE .MATCH() METHOD TO STRING";
console.log('Do we found something?', Boolean(str.match(re)));

Ich wünsche Ihnen einen schönen Tag, Sir!

5 Stimmen

Kein Grund zur match wenn es eine test Methode Sehen Sie sich die beste Antwort an.

4voto

EscapeNetscape Punkte 2674

Ich habe ein jsben.ch für Sie gemacht http://jsben.ch/#/aWxtF ...scheint, dass indexOf ein bisschen schneller ist.

0 Stimmen

Ich habe das geforkt, um einen robusteren Test zu machen. In Firefox fand ich weniger als 1% Unterschied zwischen den Methoden, aber auf Chrome, indexOf ermordet die Konkurrenz, über 500% schneller.

0 Stimmen

Ich frage mich, ob es einen großen Unterschied zwischen einem booleschen Test und != -1 gibt.

3voto

Chii Punkte 14068

Für die Suche nach einer einfachen Zeichenkette ist die Verwendung der indexOf()-Methode und die Verwendung von regex so ziemlich dasselbe: http://jsperf.com/substring - Wählen Sie also diejenige aus, die leichter zu schreiben ist.

1voto

NoxFly Punkte 165

2022 Benchmark für die Streicherforschung

から Die Antwort von Felix Kling und mit Tests, die ich mit den angegebenen Links durchgeführt habe.

Meistgenutzter Browser :

  1. Chrom (64%)
  2. Safari (19%)
  3. Neue Kante (4%)
  4. Firefox (3,26%)
  5. Samsung (2,86 %)
  6. Oper (2,12%)

Chrome und NE basieren beide auf Chromium => gleiche Leistung.

ci = Groß- und Kleinschreibung wird nicht berücksichtigt
/ = wie links

Ergebnisse der Tests

Stringlänge

Firefox

Safari

Chrom

kurz

zwischengespeicherte RegExp ci

zwischengespeicherte RegExp ci

indexOf & / ci

wert

RegExp & / ci

RegExp ci

RegExp & / ci

schlechter

lang

zwischengespeicherte RegExp

zwischengespeicherte RE & / ci & reg ci

indexOf

wert

indexOf ci

indexOf ci

RegExp

schlechter

Vergleich Operationen/Sek.

Browser

Firefox

Safari

Chrom

zwischengespeicherte RegExp

1.3M

425k

1.2M

diff

1.08x >

zwischengespeicherte RegExp Groß-/Kleinschreibung beachten

28M

31M

42M

diff

1.44/1.35x >

indexOf

27M

25M

1.9B

diff

70/76x >

indexOf case sensitive

13.8M

18.5M

1.9B

diff

137/103x >

Beste Methode für Firefox: zwischengespeicherte Regexp ohne Berücksichtigung der Groß-/Kleinschreibung
Chrome beste Methode: indexOf / indexOf case insensitive
Safari beste Methode: zwischengespeicherte RegExp ohne Berücksichtigung der Groß-/Kleinschreibung

Chrome hat weitaus bessere Leistungen als die beiden anderen.

Bester Kompromiss : indexOf : String.indexOf(substring) > -1 .

Anmerkung: Erinnern Sie daran, dass Sie, wenn Sie die indexOf case sensitive Weise, wenn Sie ein String.toLowerCase() Es werden einige Operationen hinzugefügt, so dass es dem unsensiblen Weg ziemlich ähnlich ist. In diesem Fall sollten Sie Ihre Teilzeichenkette herabsetzen avant den Suchprozess, nicht in ihm.

Regexe sind wirklich gut für komplexe und/oder Muster-Recherche/Ersatz, aber nicht für eine globale Suche, und das in allen Sprachen, wegen dem, was es ist.

0voto

Rohit kumar Punkte 11

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X