Expression régulière pour rechercher des mots dans une phrase par son préfixe
J'ai cette regex sur mongodb requête pour correspondre à des mots par préfixe:
{sentence: new RegExp('^'+key,'gi')}
Ce qui serait le bon pattern regex, si je le veux pour correspondre à une phrase qui a au moins un mot commençant par key
préfixe? Par exemple:
Si j'ai une phrase
"C'est un chien"
quand key
est "faire", alors il doit correspondre à cette phrase depuis le préfixe "faire" est une sous-chaîne de "chien".
Ma solution que de maintenant ne fonctionne que pour le premier mot de la phrase. Jusqu'à présent, seuls les matchs de cette phrase si je tape 't' ou 'e' ou 'ce'. Il ne serait pas correspondre à cette phrase à chaque fois que je tape dans le " je "(préfixe "est") ou de "faire" (préfixe pour "chien").
OriginalL'auteur Benny Tjia | 2012-01-29
Vous devez vous connecter pour publier un commentaire.
Utiliser le
\b
ancre pour correspondre à des limites de mots:trouve "faire" dans le "gentil " chien", mais ne correspond pas 'beaucoup de bruit pour rien".
'\\bdo'
.Bon point, merci
merci pour l'aide. Je upvoted toutes les réponses, car ils sont tous corrects. Je ne sais pas qui à accepter, alors je vais le plus tôt possible 🙂
OriginalL'auteur wutz
Vous pouvez utiliser l'expression
/\bprefix\w+/
. Il doit correspondre à un mot commençant par"prefix"
. Ici le\b
représente une frontière de mot et\w
est tout caractère de mot.Si vous ne voulez pas d'obtenir le mot en entier, il vous suffit de faire
/\bprefix/
. Si vous voulez mettre cela dans une chaîne, vous devez échapper à la\
:'\\bprefix'
.\b
après\w+
? Sûrement la limite de mot n'est pas un caractère de mot...Oui, vous avez raison.
OriginalL'auteur Tikhon Jelvis
Autres réponses suggérant la limite de mot de correspondance sont propres, mais signifie que l'index n'est pas utilisé efficacement. Si vous avez besoin de rapides recherches, vous pourriez envisager d'ajouter un champ "mots" avec chacun de vos mots cassés, c'est à dire
Après mettre un index sur la
words
domaine, vous pouvez revenir en arrière à l'aide de:et un
key
de "faire" correspondre à cet objet et utiliser un index.OriginalL'auteur Nic Cottrell
^
matchs de début de la chaîne (ou au début d'une ligne, si le multiligne drapeau est réglé).\b
correspond à une limite de mot.\bdo
associe les mots commençant par "faire".Donc, pour votre exemple:
(En notant que, dans un JavaScript chaîne que vous avez à barres obliques inverses.)
Si vous allez avoir besoin pour capturer le match(es) de trouver de quel mot(s) correspond au motif que vous aurez envie de placer l'expression entre parenthèses et ajouter un peu à l'image du reste de la parole:
Où
\w
est tout caractère de mot et la*
est zéro ou plus. Si vous souhaitez que les mots qui ont au moins un caractère de plus que lekey
ensuite utiliser+
au lieu de*
.Voir le nombre de regex guides sur le web pour plus de détails, par exemple, https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions
OriginalL'auteur nnnnnn