Javascript expression régulière qui correspond à deux cordes
Je ne comprends pas que beaucoup d'expression régulière et je veux en créer une qui correspond à deux cordes.
Je sais que pour une chaîne de caractères le code est .match(/something/)
et si des correspondances sur les deux chaînes, il est .match(/something|someotherthing/)
Comment écrire un projet qui ne correspond lorsque les deux chaînes sont trouvés dans le texte.g "google microsoft"
Vous devez vous connecter pour publier un commentaire.
De le faire avec une seule expression régulière, vous aurez besoin de prendre en compte le fait qu'elles puissent entrer dans l'ordre. (
.*
correspond à tous les caractères entre les deux sous-chaînes):Remarque: Si vous voulais faire plus que 2 sous-chaînes, ce serait sortir de la main. 3 chaînes pourraient venir dans
6
différents ordres, 5 chaînes pourraient venir dans120
ordres, et 10 sous-chaînes pourraient être commandés3628800
façons différentes! C'est pourquoi l'utilisation des fonctions du langage (Javascript), lui-même, comme dans une Explosion de Pilules de réponse, peut être beaucoup mieux que d'essayer d'en faire trop avec une expression régulière.Vous pouvez simplement utiliser
.match
deux foisDans ce cas, il peut être plus rapide d'utiliser
.indexOf
Vous pouvez également utiliser une verbose regex
match
deux fois, mais je l'ai voulu avec la regex pour faire plus court.. mais avec la regex il semble être plus que d'utilisermatch
deux foisAutres réponses sont parfaitement bien pour votre problème spécifique, mais comme Paulpro noté vraiment sortir de la main quand vous avez plus de deux mots.
La solution la plus simple est d'utiliser plusieurs contrôles d'Explosion Pilules suggère.
Mais pour un plus évolutif regex seule approche, vous pouvez utiliser lookaheads:
L'anticipation ne fait pas consommer n'importe quoi, donc après que la première condition est vérifiée (qui
.*google
peut correspondre), vous êtes de retour au début de la chaîne et peut vérifier la condition suivante. Le patron de passe seulement si tous les lookaheads faire.Notez que si votre entrée peut contenir des sauts de ligne,
.*
ne le fera pas. Vous aurez à utiliser[^]*
ou[\s\S]*
à la place (en va de même pour les réponses des autres).