-1
votes

Comment analyser le fichier de type JSON avec regex


J'ai cette structure de mes données d'entrée, c'est comme JSON mais ne contenant pas de chaînes. Il suffit d'analyser peu d'informations à partir de ces données

const regex = /.appVersion = (".*"?);/
const found = data.match(regex)
console.log(found)


5 commentaires

Je pense que nous aurions besoin de plus d'informations pour répondre à cela. Vous dites que c'est la structure des données, mais cela a-t-il déjà l'air différent? Est-ce que ça va toujours très semblable à cela?


Quels sont vos résultats Ecceptés \ matchs?


S'il semble toujours très similaire à celui-ci, avec des différences instantanantes, je créerais une gamme de chaînes en faisant data.split (';') , je m'assurerais que toutes les chaînes ont le { Le caractère retiré du démarrage et toutes les chaînes sont coupées de l'espace blanc, puis je regarderais la matrice pour une chaîne qui commence par .appversion et travaille de là


Pourquoi la structure de vos données d'entrée est-elle comme celle-ci? Est-ce une API externe ou vous vous rendez-vous?


" C'est comme Json " Je ne le dirais pas. Vous avez = et ; et quoi que ce soit = ({nom = axes; ....... (continue)} est. Il semble que rien comme Json, en dehors d'avoir des crochets bouclés.


5 Réponses :


3
votes

Vous devez échapper au . code> avant Appversion code> puisqu'il s'agit d'un caractère spécial dans Regex et que vous pouvez utiliser \ d code> au lieu de . * code> pour correspondre uniquement aux chiffres. Si vous voulez juste le numéro à capturer, sans les citations, vous pouvez les sortir des parenthèses.

const regex = /\.appVersion = "(\d+)";/
const found = data.match(regex)
const appVersion = found[1];


1 commentaires

Arghh cette période au début, totalement oubliée à ce sujet. Thasnk!



0
votes

Votre regex recherche . code> qui est "n'importe quel caractère" dans une regex. Échappez-le avec une barre oblique inverse:

/\.appVersion = ("\d+");/


0 commentaires

1
votes
const string = '{ .appVersion = "1230"; DisplayStrings = (...(continues)';
const appVersion = string.match(/\.appVersion\s*=\s*"([^"]+)"/)[1];
If that's what you need...I'm not sure where the format you're trying to parse comes from, but consider asking (making) your data provider return json string, so you could easily invoke JSON.parse() which works in both node and browser environments.

0 commentaires

0
votes

n'utilise pas . * pour capturer la valeur, c'est gourmand.

Vous pouvez utiliser quelque chose comme \ "[^ \"] * - correspondre à un devis, puis n'importe quel caractère, à l'exception de la citation, autant de temps que possible.

Essayez xxx

Notez que le premier point doit également être cité, et les espaces doivent être exactement comme dans votre exemple.


0 commentaires

1
votes

Vous pouvez essayer ce qui suit:

var data='{ .appVersion = "1230"; DisplayStrings = ( A ); customParameters = ( { name = Axes;.......(continues)}';
const regex = /.appVersion = [^;]*/ //regex test: https://regex101.com/r/urX53f/1
const found = data.match(regex);
var trim = found.toString().replace(/"/g,''); // remove the "" if necessary
console.log(found.toString());
console.log(trim);


0 commentaires