0
votes

supprimer les guillemets autour UNIQUEMENT des valeurs numériques dans la chaîne

    let dss = JSON.stringify(arr);
    let ds = dss.replace(/"(\d)"/g,"$1");

0 commentaires

3 Réponses :


2
votes
let ds = arr.replace(/"(\d+)"/g,"$1");
add + before \d like: (\d+)

1 commentaires

Bonne réponse, mais vous devez ajouter une explication et en faire un extrait



2
votes

Votre expression régulière recherche un chiffre ajoutez un + pour un ou plusieurs

var arr= '[{"a":"b","c":"521"}]';
let ds = arr.replace(/"(\d+)"/g,"$1");
console.log(ds);


2 commentaires

ne fonctionnait toujours pas pour moi ... dois-je le faire avant le stringify pas après?


Bien sûr après, avant ce n'est même pas une chaîne ... c'est un objet js, de toute façon pourquoi ne changerais-tu pas l'objet normalement sans regex avant le stringify?



3
votes

J'analyserais le JSON et utiliserais une fonction de reviveur pour remplacer les chaînes de chiffres par juste les chiffres:

var arr= '[{"a":"b","c":"521"}]';
const parsed = JSON.parse(
  arr,
  (key, value) => typeof value === 'string' && /^\d+$/.test(value)
    ? Number(value)
    : value
);
console.log(JSON.stringify(parsed));


7 commentaires

merci .. presque, mais il semble qu'il ne comprend pas les valeurs décimales? c'est-à-dire "38,97219723"


Si les décimales sont une possibilité, ajoutez des décimales facultatives au modèle: ^\d+(?:\.\d+)?$


Ça a marché! cependant .... comment pourrais-je gérer pour prendre également le négatif. c'est-à-dire "-33,21"


Ajouter une option - au début du modèle?


Tels que -> (- {1}?) ^ \ D + (?: \. \ D +)? $


Probablement comme ça ey? /-?^\d+(?:\.\d+)?$/


Mettez le tiret optionnel après le ^ (au début des chiffres), sinon le motif ne correspondra jamais. ^-?