2017-08-30 2 views
-1

Je connais la recherche d'une chaîne pour une chaîne donnée:Comment rechercher un mot (pas seulement une sous-chaîne) dans une chaîne en javascript?

if (string.indexOf(substring) > -1) { 
    var containsSubstring = true; 
} 

Mais si la sous-chaîne doit être un mot?

Un mot:

  • il doit être au début de la chaîne avec un espace après; ou
  • à la fin de la chaîne avec un espace avant celle-ci; ou
  • au milieu de la chaîne avec un espace de chaque côté

Si je suis à la recherche de la sous-chaîne fox:

the quick brown fox // matches 
fox jumps over the lazy dog // matches 
quick brown fox jumps over // matches 


the quick brownfox // does not match 
foxjumps over the lazy dog // does not match 
quick brownfox jumps over // does not match 
quick brown foxjumps over // does not match 
quick brownfoxjumps over // does not match 

Est-il possible d'atteindre les résultats ci-dessus avec indexOf ou aurai-je besoin d'utiliser regex?

+2

Quelle est la différence entre une chaîne et un mot dans ce contexte? – Y2H

+0

Avez-vous envisagé d'utiliser regex? Ou jQuery – evolutionxbox

+0

Regex est probablement le plus propre, mais l'utilisation d'un espace fonctionnerait si vous vérifiez toutes les coditions –

Répondre

1

Avez-vous essayé d'utiliser une expression régulière avec les limites de mots:

if (/(\bfox\b)/g.test(substring)) { 
    var containsSubstring = true; 
} 

https://regex101.com/r/G3iOGi/1

+0

@Rounin si c'est la bonne réponse pouvez-vous le marquer s'il vous plaît, j'ai besoin de la réputation :) – combatc2

+0

Excellent travail, @ combatc2 - merci. J'ai été absent de mon ordinateur portable, sinon je l'aurais marqué plus tôt. – Rounin

+0

Je l'ai séparé en mettant la regex dans sa propre variable: 'var pattern =/\ bfox \ b/g; var string = 'lequickbrown fox'; console.log (pattern.test (string)); '' .test() 'est parfait, car il renvoie une valeur booléenne sans nécessiter une instruction if - merci encore. – Rounin

0

Vous pouvez le faire en vérifiant s'il est au début de la chaîne et a un espace après, ou est à la fin de la chaîne et a un espace avant, ou est au milieu de la chaîne et a un espace avant et après.

+0

Merci Frank. Oui, je comprends ce que je dois faire. Je ne comprends tout simplement pas comment je peux utiliser 'indexOf()' pour y parvenir. – Rounin

+0

Donc ... il se trouve que alors que 'indexOf()' est bon pour les sous-chaînes simples, 'search()' est la méthode à utiliser pour les expressions régulières. Bien que, dans ce cas précis, la méthode 'test()', mentionnée par @ combatc2 ci-dessus, soit la meilleure solution de tous. – Rounin

1

Vous pouvez utiliser la méthode search.

var string = "foxs sas" 
 

 
var search = string.search(/\bfox\b/) >= 0? true : false; 
 

 
console.log(search)

+0

Non. La méthode ci-dessus retourne 'true' à chaque fois que la chaîne' fox' est présente dans la chaîne - même si la chaîne 'fox' n'est pas un mot. Par exemple, 'brownfox sauts' et' brown foxjumps' et 'brownfoxjumps' retourneront' true'. – Rounin

+0

regardez à nouveau s'il vous plaît! –