3
votes

Comment faire correspondre uniquement le mot exact en utilisant indexOf ou inclut dans JavaScript

Je souhaite rechercher uniquement le mot spécifique de ma chaîne en utilisant javascript. Mais l'utilisation de match, indexOf ou includes ne fonctionne pas correctement. Supposons que

    let str = "Widget test";

   if (~str.indexOf("Widge")) {
    console.log( 'Found it!' );
    }

il affichera le mot trouvé car il ne correspond pas au mot entier uniquement à la sous-chaîne. Comment puis-je le renvoyer à found si seule la correspondance est Widget

Mais ce que je veux, c'est:

if input string = Widget, output = true

if chaîne d'entrée = Widge, sortie = faux


5 commentaires

Quelles sont les entrées et sorties possibles?


@JamesCoyle modifié, vérifiez maintenant


utilisez simplement str == "Widget" et si vous voulez faire correspondre n'importe quel mot, utilisez str.split (/ \ s + /) utilisez indexOf sur un tableau.


Votre chèque est dans le mauvais sens, .. essayez -> ~ "Widge" .indexOf ("Widget")


Une raison de privilégier l'opérateur au niveau du bit par rapport à String.contains ?


4 Réponses :


4
votes

Pour correspondre au mot exact, vous devrez utiliser une expression régulière.

/ \ bWidget \ b / correspondra au mot entier.

Dans votre exemple:

let str = "Widget";

if (str.search(/\bWidget\b/) >= 0) {
 console.log( 'Found it!' );
}


2 commentaires

RegEx est idéal pour ce type de choses, mais -> vous devrez , ce n'est pas vrai.


Vous avez raison, ce n'est qu'une approche à ce problème :)



0
votes

Vous pouvez également essayer ceci.

let str = "Widget test";
if(str.split(" ").indexOf('Widge') > -1) {
    console.log( 'Found it!' );
}


0 commentaires

0
votes

En essayant de répondre à cette question, la bonne réponse a été fournie. Et il était également un peu difficile de savoir ce que OP veut réellement ...

... alors en attendant, j'ai écrit cette terrible solution de ~ hack ~:

const matchType = (source = '', target = '') => {
  const match = source.match(target) || [];
  return (!isNaN(match.index) && !!~match.index)
    ? match.input === target ? 'complete' : 'partial'
    : 'none';
};

console.log(matchType('foo', 'bar'));
console.log(matchType('foo', 'fo'));
console.log(matchType('foo', 'foo'));

Vous pouvez maintenant avoir trois types de matchs différents, n'est-ce pas cool? : D


0 commentaires

0
votes

si la chaîne n'est pas trouvée, indexOf renverra -1 afin que vous puissiez vérifier que l'index n'est pas égal à -1 que la chaîne trouvée

let str = "Widget test";

if (str.indexOf("wi")!= -1) {
  console.log( 'Found it!' ); 
}
<!DOCTYPE html>
<html>
<body>

<button type="button" onclick="match()">Click Me!</button>

</body>
</html>
function match(){
var test = "Widget test";
if (test.indexOf("widget")!= -1) {
  alert( 'Found it!' );
}else{
alert( 'Sorry,not Found it!' );
}
}


0 commentaires