1
votes

Comment "inverser le format"

J'essaie de trouver un moyen de capturer des données à partir d'entrées de chaîne et de les mettre facilement en œuvre avec des conteneurs. Par exemple:

Promotion { name: "Sarah" , position: "Superintendent" }

Je sais comment tester la chaîne par rapport à une expression régulière et retourner si elle correspond ou non:

message.test(\[a-zA-Z]+ has been promoted to [a-zA-Z]+\g);

Cependant je suis perplexe à trouver comment, alors, trouver les indices des correspondances de regex pour les placer dans un objet:

var message = "Sarah has been promoted to Superintendent";

J'ai l'impression que la réponse est sur la pointe de mes cellules cérébrales mais je suis perdu. Quelles sont les étapes pour capturer, par exemple, l'index du premier caractère générique dans la chaîne, séparer ce mot, puis le faire pour le prochain élément de données (en étant suffisamment flexible pour gérer jusqu'à 9 "éléments génériques"?


2 commentaires

Vous recherchez des groupes RegEx!


Les barres obliques dans \ [a-zA-Z] + ont été promues en [a-zA-Z] + \ g doivent être en avant? / [a-zA-Z] + a été promu [a-zA-Z] + / g


3 Réponses :


0
votes
["Sarah has been promoted to Superintendent", "Sarah", "Superintendent"]

0 commentaires

0
votes

Oui, vous voudrez capturer des groupes.

Sarah Superintendent

sorties

var message = "Sarah has been promoted to Superintendent";
var match = /([a-zA-Z]+) has been promoted to ([a-zA-Z]+)/g.exec(message);
console.log(match[1], match[2]);

Voir ici pour une explication plus approfondie de RegExp.exec () .


0 commentaires

0
votes

Découvrez String.prototype.match : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match

    let message = "Sarah has been promoted to Superintendent";
    let [, name, position] = message.match(/([a-zA-Z]+) has been promoted to ([a-zA-Z]+)/);
    let promotion = {name, position};
    
    console.log(promotion);


1 commentaires

Cette langue est beaucoup plus avancée que ma vieille école. Je l'ai résolu en utilisant des boucles for, mais c'est beaucoup plus facile à travailler. Merci