web-dev-qa-db-fra.com

Le moyen le plus rapide de vérifier qu'une chaîne contient une autre sous-chaîne en JavaScript?

Je travaille avec un problème de performance sur JavaScript. Donc, je veux juste demander: quel est le moyen le plus rapide de vérifier si une chaîne contient une autre sous-chaîne (j'ai juste besoin de la valeur booléenne)? Pouvez-vous suggérer votre idée et un exemple de code de code?

145
Đinh Hồng Châu

Est-ce que ça marche pour toi?

string1.indexOf(string2) >= 0

Edit: Cela ne peut pas être plus rapide qu'un RegExp si la chaîne2 contient des modèles répétés. Sur certains navigateurs, indexOf peut être beaucoup plus lent que RegExp. Voir les commentaires.

Edit 2: RegExp peut être plus rapide que indexOf lorsque les chaînes sont très longues et/ou contiennent des modèles répétés. Voir les commentaires et la réponse de @ Felix.

17
Stephen Chung

J'ai constaté que l'utilisation d'une simple boucle for, l'itération sur tous les éléments de la chaîne et la comparaison à l'aide de charAt sont plus rapides que indexOf ou Regex. Le code et la preuve sont disponibles sur JSPerf .

ETA: indexOf et charAt ont tous deux des performances similaires sur Chrome Mobile selon les données de la portée du navigateur répertoriées sur jsperf.com.

8
wpg4665

Dans ES6, la méthode includes() est utilisée pour déterminer si une chaîne peut être trouvée dans une autre chaîne, en renvoyant true ou false selon le cas.

var str = 'To be, or not to be, that is the question.';

console.log(str.includes('To be'));       // true
console.log(str.includes('question'));    // true
console.log(str.includes('nonexistent')); // false

Voici jsperf entre

var ret = str.includes('one');

Et

var ret = (str.indexOf('one') !== -1);

Comme le résultat indiqué dans jsperf, il semble que les deux fonctionnent bien.

7
zangw

Le plus rapide

  1. (ES6) comprend
 var string = "bonjour", 
 substring = "lo"; 
 string.includes (substring); 
  1. ES5 et plus ancien indexOf
 var chaîne = "bonjour", 
 sous-chaîne = "lo"; 
 chaîne.indexOf (sous-chaîne)! == -1; 

http://jsben.ch/9cwLJ

enter image description here

6
Tính Ngô Quang

Pour trouver une chaîne simple, utiliser la méthode indexOf () et regex est à peu près la même chose: http://jsperf.com/substring - choisissez donc celle qui vous semble la plus facile à écrire.

3
Chii

J'ai fait un jsben.ch pour vous http://jsben.ch/#/aWxtF ... semble que indexOf est un peu plus rapide.

2
EscapeNetscape

C'est un moyen facile d'utiliser la méthode .match() pour 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)));

Je vous souhaite une belle journée, monsieur!

1
Anton Danilchenko