Ainsi, vous pouvez facilement vérifier si une chaîne contient une sous-chaîne particulière en utilisant la méthode .includes ().
Je souhaite savoir si une chaîne contient un mot.
Par exemple, si j'applique une recherche sur "on" pour la chaîne, "les téléphones sont bons", elle doit renvoyer false. Et, il devrait renvoyer vrai pour "le garder sur la table".
9 Réponses :
Vous pouvez utiliser .includes () et vérifier le mot. Pour vous assurer qu'il s'agit d'un mot et qu'il ne fait pas partie d'un autre mot, vérifiez que l'endroit où vous l'avez trouvé est suivi d'un espace, d'une virgule, d'un point, etc.
ou mieux utiliser regex
@Aarif aussi un bon moyen de le faire.
Vous devez d'abord le convertir en tableau en utilisant split () puis utiliser includes()
string.split(" ").includes("on")
Il suffit de passer d'espaces "" à split () pour obtenir tous les mots
Et si les mots sont séparés par une virgule?
Cela ne fonctionnera pas si le mot est suivi d'une virgule
.includes () fonctionne aussi bien sur les chaînes que sur les tableaux, donc .split () n'est pas nécessaire.
@adiga OP n'a pas demandé la séparation de ,
@Scott Marcus oui ça marche sur les cordes mais il veut faire correspondre le mot entier. Et inclut sur la chaîne ne correspond pas au mot entier
Il le fait si la chaîne de recherche a des séparateurs d'espace: string.includes ("on") ou string.includes ("on.") . Comme d'autres l'ont mentionné, RegExp serait le meilleur.
Non, cela posera des problèmes si le on est en dernier ou en début
Voir mon commentaire modifié. Parce que string.split ("") a les mêmes problèmes.
@Scott Marcus Je sais mais je ne voulais pas utiliser regex, j'aimerais connaître ces problèmes, donnez des exemples où cela échouerait.
Cela échouerait si les mots n'étaient pas délimités par des espaces.
@Scott Marcus signifie plus d'un espace?
Non, je veux dire: var theString = "pomme, orange-banane; pamplemousse"
@Scott Marcus mais OP n'a pas demandé que sa chaîne soit séparée par , -;
Vous pouvez diviser et essayer de trouver:
const str = 'keep it on the table'; const res = str.split(/[\s,\?\,\.!]+/).some(f=> f === 'on'); console.log(res);
De plus, certaines méthodes sont très efficaces car elles retournent vrai si un prédicat est vrai.
et quand c'est le cas!,.,; etc?
@epascarello merci pour ce bon commentaire! J'ai modifié ma réponse.
Une version simple pourrait simplement être divisée sur l'espace blanc et regarder dans le tableau résultant pour le mot:
"Phones are good, aren't they? They are. Yes!".split(/[\s,\?\,\.!]+/)
Cela se divise simplement par espace, lorsque vous avez besoin d'analyser le texte (en fonction de votre input), vous rencontrerez plus de délimiteurs de mots que d'espaces. Dans ce cas, vous pouvez utiliser une expression régulière pour rendre compte de ces caractères. Quelque chose comme:
"phones are good".split(" ").find(word => word === "on") // undefined
"keep it on the table".split(" ").find(word => word === "on") // "on"
J'irais avec les hypothèses suivantes:
Par conséquent, j'écrirais mon code comme suit:
function containsWord(word, sentence) {
return (
sentence.startsWith(word.trim() + " ") ||
sentence.endsWith(" " + word.trim()) ||
sentence.includes(" " + word.trim() + " "));
}
console.log(containsWord("test", "This is a test of the containsWord function."));
Utilisez Array.prototype.includes
https://developer.mozilla.org/ fr-FR / docs / Web / JavaScript / Reference / Global_Objects / Array / includes
console.log("keep it on the table".toLowerCase().split(" ").includes("on")); // true
console.log("phones are good".toLowerCase().split(" ").includes("on")); // false
Ou vous pouvez utiliser une expression régulière.
Cela ne fonctionne pas pour les mots au début ou à la fin d'une phrase.
Merci pour le commentaire. Je l'ai édité. Le meilleur moyen sera cependant d'utiliser une expression régulière
Essayez ce qui suit -
var mainString = 'codehandbook'
var substr = /hand/
var found = substr.test(mainString)
if(found){
console.log('Substring found !!')
} else {
console.log('Substring not found !!')
}
Ceci s'appelle une regex - expression régulière
Vous pouvez utiliser 101regex lorsque vous devez les contourner (cela aide) . Des mots avec des séparateurs personnalisés également.
const regex = /(^.*\son$)|(^on\s.*)|(^on$)|(^.*\son\s.*$)/i;
console.log(regex.test('phones are good'));
console.log(regex.test('keep it on the table'));
console.log(regex.test('on'));
console.log(regex.test('keep iton the table'));
console.log(regex.test('keep it on'));
console.log(regex.test('on the table'));
Explication :
Je crée ici plusieurs groupes de capture pour chaque possibilité:
(^. * \ son $) on est le dernier mot
(^ on \ s. *) on est le premier mot
(^ on $) on est le seul mot
(^. * \ son \ s. * $) on est un mot intermédiaire p>
\ s signifie un espace ou une nouvelle ligne
function checkWord(word, str) {
const allowedSeparator = '\\\s,;"\'|';
const regex = new RegExp(
`(^.*[${allowedSeparator}]${word}$)|(^${word}[${allowedSeparator}].*)|(^${word}$)|(^.*[${allowedSeparator}]${word}[${allowedSeparator}].*$)`,
// Case insensitive
'i',
);
return regex.test(str);
}
[
'phones are good',
'keep it on the table',
'on',
'keep iton the table',
'keep it on',
'on the table',
'the,table,is,on,the,desk',
'the,table,is,on|the,desk',
'the,table,is|the,desk',
].forEach((x) => {
console.log(`Check: ${x} : ${checkWord('on', x)}`);
});
Vous pouvez .split () votre chaîne d'espaces ( \ s + ) dans un tableau, puis utiliser .includes () pour vérifier si le tableau de chaînes contient votre mot:
const hasWord = (str, word) =>
str.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"").split(/\s+/).includes(word);
console.log(hasWord("phones are good son!", "on"));
console.log(hasWord("keep it on, the table", "on"));
Si vous êtes préoccupé par la ponctuation, vous pouvez d'abord la supprimer en utilisant .replace () (comme indiqué dans cette réponse), puis split () :
const hasWord = (str, word) =>
str.split(/\s+/).includes(word);
console.log(hasWord("phones are good", "on"));
console.log(hasWord("keep it on the table", "on"));
Cela me semble une bonne réponse. Je ne sais pas pourquoi les gens votent contre cela sans donner leurs 2 cents. Donnez-lui un vote favorable.
@MarciaOng merci :) content de ne pas être le seul à penser que le -1 était injustifié
@NickParsons excellente réponse. Les gens doivent lire et comprendre avant de voter. C'était exactement ce que je cherchais.
Par exemple. laissez simplement un espace blanc de chaque côté du mot , ou utilisez
\ bword \ b