Question Comment vérifier si une chaîne contient une sous-chaîne dans JavaScript?


Habituellement je m'attendrais à un String.contains() méthode, mais il ne semble pas y en avoir un.

Quel est un moyen raisonnable de vérifier cela?


7436
2017-11-24 13:05


origine


Réponses:


Voici une liste des possibilités actuelles:

1. (ES6) includes-aller répondre

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

2. ES5 et plus indexOf

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

String.prototype.indexOf renvoie la position de la chaîne dans l'autre chaîne. Si non trouvé, il reviendra -1.

3. search-aller répondre

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

4. lodash comprend-aller répondre

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

5. RegExp-aller répondre

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

6. Match-aller répondre

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

Des tests de performance montrent que indexOf pourrait être le meilleur choix, si cela arrive à un point où la vitesse compte.


11460
2017-12-30 04:23



Vous pouvez facilement ajouter un contains méthode à Chaîne avec cette instruction:

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

Remarque: voir les commentaires ci-dessous pour un argument valable pour ne pas l'utiliser. Mon conseil: utilisez votre propre jugement.

Alternativement:

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

822
2017-11-24 14:17



Le problème avec votre code est que JavaScript est sensible à la casse. Votre appel de méthode

indexof()

devrait être réellement

indexOf()

Essayez de le réparer et voyez si cela aide:

if (test.indexOf("title") !=-1) {
    alert(elm);
    foundLinks++;
}

427
2018-01-07 10:23



Il y a un string.includes en ES6:

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

Notez que vous devrez peut-être charger es6-shim ou similaire pour que cela fonctionne sur les anciens navigateurs.

require('es6-shim')

359
2017-11-24 13:06



var index = haystack.indexOf(needle);

340
2018-03-05 09:53



Vous pourriez utiliser le JavaScript search() méthode.

La syntaxe est: string.search(regexp)

Il renvoie la position du match, ou -1 si aucune correspondance n'est trouvée.

Voir des exemples ici: jsref_search

Vous n'avez pas besoin d'une syntaxe d'expression régulière compliquée. Si vous n'êtes pas familier avec eux un simple st.search("title") ça ira. Si vous voulez que votre test soit insensible à la casse, alors vous devriez faire st.search(/title/i).


237
2017-10-21 05:31



String.prototype.includes() a été introduit en ES6.

Détermine si une chaîne peut être trouvée dans une autre chaîne,   retourner vrai ou faux selon le cas.

Syntaxe

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

Paramètres

searchString

Une chaîne à rechercher dans cette chaîne.

position

La position dans cette chaîne à laquelle commencer à chercher searchString par défaut à 0.

Exemple

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("To be", 1)); // false  

Remarque

Cela peut nécessiter un calage ES6 dans les anciens navigateurs.


167
2018-05-29 07:46



Si vous cherchez une alternative pour écrire la vérification -1 moche, vous préférez un ~ tilde à la place.

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

Joe Zimmerman - vous verrez que l'utilisation de ~ on -1 le convertit à 0. Le nombre 0 est un   valeur Falsey, ce qui signifie qu'il va évaluer à faux lorsqu'il est converti en   un booléen. Cela peut ne pas sembler une grande idée au début, mais   rappelez-vous des fonctions comme indexOf renverront -1 quand la requête n'est pas   a trouvé. Cela signifie qu'au lieu d'écrire quelque chose de similaire à ceci:

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

Vous pouvez maintenant avoir moins de caractères dans votre code pour pouvoir l'écrire   comme ça:

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

Plus détails ici


120
2017-09-13 03:45



Ce morceau de code devrait bien fonctionner:

var str="This is testing for javascript search !!!";
if(str.search("for") != -1) {
   //logic
} 

82
2017-12-13 20:05



Une façon commune d'écrire un contains méthode en JavaScript est:

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

L'opérateur de négation bit à bit (~) est utilisé pour tourner -1 dans 0 (falsey), et toutes les autres valeurs seront non nulles (vérité).

Les opérateurs de négation booléens doubles sont utilisés pour convertir le nombre en un booléen.


77
2018-03-14 02:10