text d'entrée: em> J'ai besoin de faire correspondre le texte en gras afin que la RegEx suivante: em> p> Comment puis-je simplifier l'expression régulière en évitant Réécrire le (lundi | mardi | mercredi | jeudi | vendredi | Samedi | Dimanche) Code> Capture Group deux fois? P> P> P>
4 Réponses :
Vous pouvez définir une alternance de fragment de chaîne, puis la réutiliser:
p>
var input = "Monday to Friday 6:00 a.m. to 8:00 p.m.";
var alt = "(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)";
var re = new RegExp("^" + alt + " (to) " + alt + ".*$");
if (re.test(input)) {
console.log("valid");
}
else {
console.log("invalid");
}Ouais, comme je l'ai dit dans le commentaire que je cherchais un mécanisme de regex. Donc s'il n'y a pas d'autre que je vais recourir à cette
comme je l'ai dit code> est une grammaire anglaise incorrecte, à moins que vous ne me disiez que vous venez de dire "comme". Vous voulez dire "comme je l'ai dit."
Lol totalement non pertinent mais ok et j'utilise cette phrase toute ma vie. MACMillandictionary.com/dictionary/British/Like-i-Say-said < / a>
..aet il y a ce Quodb.com/Search/%22Like%20i%20Said % 22 et oui je sais que je ne peux pas commencer une phrase avec "et"
Et qu'est-ce qui vous fait penser qu'il y a une règle contre les phrases de départ avec "et"? Comme Churchill (réputé) dit, " C'est le genre de non-sens avec lequel je ne serrerai pas ". Et "Comme je l'ai dit" est parfaitement idiomatique anglais anglais - un peu informel, peut-être, mais pas incorrect. Je ne comprends pas assez américain de pontifier.
@Jonathanleffler aime comme une préposition et un adverbe est vraiment nécessaire ici. Mais rien de tout cela ne compte maintenant, car à l'avenir, nous allons tous utiliser de manière grammairienne.
Ceci est plus court, mais aussi Ulier: bien qu'il corresponde à quelque chose comme Je resterais certainement avec la version plus grande moi-même, pour des raisons de lisibilité. p> p> lundi vendredi code> également (sans le à code>) . P>
Notez que cela pourrait correspondre "à" deux fois, comme dans " du lundi au vendredi à b> travail"
Si les hypothèses suivantes peuvent être effectuées: p>
alors vous pourriez faire: p>
^ \ b ((((à | ^) (lundi | mardi) {2} \ b code> p>
^ code> correspond au début de l'entrée. li>
-
\ b code> nécessite que le premier caractère soit un caractère de mots. Il est là pour empêcher la correspondance "to" au début de la chaîne. Li>
-
{2} code> nécessite la partie principale pour correspondre deux fois dans une rangée li>
-
(à | ^) code> peut correspondre en théorie avec "to" ou le début de l'entrée, mais depuis la première fois que nous savons que nous sommes au début (en raison du premier code ^ code>), et il ne peut pas correspondre "à" en raison du précédent \ b code>, il s'agit d'une opération sans fonctionnement. La deuxième fois, il ne peut plus correspondre au début de l'entrée, puisque nous avons déjà assorti un jour, alors "pour" peut correspondre à la deuxième itération. Li>
-
\ b code> à la fin est là pour éviter que quelque chose comme mardimorning code> correspondrait. LI>
ul> En supposant que votre texte de recherche contient uniquement des données uniquement au format: Jour de 6h00 à 8h00 à 8h00, vous pouvez utiliser
re.findall("([A-Za-z]*day)\s(to)\s([A-Za-z]+day)","Monday to Tuesday 6:00 a.m. to 8:00 p.m")
Dans quel moteur implémentez-vous cela dans?
J'utilise JavaScript
Vous devriez quitter les mécanismes pure regex et utiliser des caractéristiques de la langue environnante, par exemple. parties de la regex dans une variable textuelle. Serait-ce une option?
Hé bien oui. Je pourrais
laisser capturergroup = (lundi | mardi ...) code> et fairelaissez regex = capturegroup + '(à)' + capturegroup code> mais je cherchais un mécanisme de regexSi vous n'avez pas besoin de captures individuelles et que le motif doit se produire au début de l'entrée, vous pourriez faire
^ ((((((^ ^) (lundi | mardi)) {2} code>@Trincot ouais cela fonctionnera +1
Dans Perl, vous pouvez utiliser
My $ rx1 = qr / (lundi | mardi | mercredi | Jeudi | Vendredi | Samedi | Dimanche) /; mon $ rx2 = qr / \ b $ RX1 \ s + to \ s + $ RX1 \ B /; code> qui vous empêche d'écrire une expression longue deux fois, mais l'incorpore tout simplement deux fois dans la regex opérationnelle que vous pourriez utiliser avecpendant (<>) {imprimé "1 $ - 2 \ n" si m / $ rx2 /; } code>. Qui imprimelundi au vendredi code> etsamedi - dimanche code> sur deux lignes pour les données d'échantillonnage dans la question.Avec PCRE, vous pouvez utiliser
(? Group_number) CODE> Pour répéter le motif défini dans un groupe Démo . Malheureusement, ça ne marche pas avec JavaScript