web-dev-qa-db-fra.com

Les expressions rationnelles Javascript obtiennent un tableau de toutes les correspondances, pas seulement de la première occurrence.

J'essaie de faire correspondre toutes les instances de rel| ou syn| et de tout mot qui le suit. J'ai la bonne expression rationnelle, comme vous pouvez le voir ici: https://regex101.com/r/E7RsbZ/1 mais lorsque je la mets dans mon JS, elle ne semble correspondre à la première instance de rel| ou syn| . Voici le code pertinent: 

var regex = /(syn|rel)\|[a-zA-Z]*/mgi;

var regexed1 = regex.exec(text);

Lorsque le texte est identique à l'entrée regex101, il retourne le tableau ['syn|felicitous', 'syn'].

Je ne sais pas pourquoi il fait ça. Ce que je veux qu’il retourne, c’est un tableau qui contient toutes les instances de rel| ou syn| afin que je puisse le .toString() et l’imprimer. J'ai trouvé cette SO réponse ce qui implique que je devrais utiliser une boucle, mais le problème est que je ne saurai pas toujours combien d'instances de rel| ou syn| il y en aura, je ne peux donc pas coder en dur. le nombre de fois qu'il devrait boucler.

N'importe quelle aide avec ceci serait appréciée, ne sachant pas où aller.

5
Egrodo

Vous recherchez String#match , qui renvoie un tableau contenant toutes les correspondances lorsque l'expression régulière transmise comporte l'indicateur global (g):

var string = '\
adjective|syn|felicitous\
adjective|syn|glad\
adjective|syn|well-chosen\
adjective|ant|unhappy\
adjective|rel|felicitous\
adjective|rel|glad\
adjective|rel|cheerful\
adjective|rel|content\
adjective|rel|contented\
adjective|rel|elated\
adjective|rel|euphoric\
adjective|rel|joyful\
adjective|rel|joyous\
adjective|sim|felicitous\
adjective|sim|blessed\
adjective|sim|blissful\
adjective|sim|bright\
adjective|sim|fortunate\
adjective|sim|golden\
adjective|sim|halcyon\
adjective|sim|laughing\
adjective|sim|prosperous\
adjective|sim|riant\
adjective|sim|willing\
'

var regex = /(syn|rel)\|[a-zA-Z]*/mgi;

var matches = string.match(regex)

console.log(matches)
.as-console-wrapper { min-height: 100vh; }

7
gyre

exec () Teste une correspondance dans une chaîne. Retourne le premier match.

Vous pouvez utiliser match () pour renvoyer l'intégralité des caractères trouvés.

La méthode match () extrait les correspondances lors de la comparaison d'une chaîne avec une expression régulière.

Syntaxe:

str.match(regexp)

pour plus d'informations, voir MDN

1
Abhijith s.s