J'essaie de comprendre une expression régulière dans JS qui correspond entre deux caractères, mais il peut y avoir deux variantes différentes, il doit donc le savoir. Je dois faire la correspondance entre virgule et (, OU virgule et lettre suivie d'un point. ("T.")
Voici les données que j'ai:
Doe, John (SUP)
Doe, John T. (SUP)
Doe, John Smith (SUP)
Doe, John Smith T. (SUP)
Doe, John-Smith (SUP)
Doe, John-Smith T. (SUP)
Je dois faire correspondre juste le prénom de cela. Ce serait donc comme ceci:
John
John
John Smith
John Smith
John-Smith
John-Smith
Voici le code que j'ai jusqu'à présent:
var nameLinkAdd = nameLink.match(/\,(.*?)\(/g);
Aucune suggestion? Merci!
3 réponses
Cela fonctionnera si vous n'avez pas nécessairement le (SUP)
après. C'est-à-dire que cela fonctionnerait
Doe, John
Doe, John-Smith
nameLink.match(/\, *([A-Za-z]+(?:[- ]+[A-Za-z]+\b(?!\.))*)/)'
Le (?!.)
s'assure que vous ne capturez rien suivi d'un point .
.
Si vous voulez éviter les contournements (cela pourrait être un problème de vitesse, bien qu'avec des chaînes aussi courtes, je ne pense pas), essayez:
nameLink.match(/\, *([A-Z][a-z]+(?:[- ]+[A-Z][a-z]+)*)/)'
Cependant, cela suppose que tous les noms ont plus d'une lettre et commencent par une majuscule suivie par des minuscules (ce qui semble raisonnable, y a-t-il des noms avec des lettres majuscules internes ou des noms composés d'une seule lettre?)
J'aime utiliser http://regexpal.com/ pour trouver une expression régulière.
Essayer:
nameLink.match(/^(\w+(?:\s*\w+)*)\s+(?:\w\. )?\()/);
Ce que vous voulez sera dans le groupe 1.
normal* (special normal*)*
à nouveau;)
- normal =
\w
- spécial =
\s*
Questions connexes
De nouvelles questions
javascript
Pour des questions concernant la programmation dans ECMAScript (JavaScript / JS) et ses divers dialectes / implémentations (hors ActionScript). Veuillez inclure toutes les balises pertinentes dans votre question; par exemple, [node.js], [jquery], [json], etc.