2016-11-04 3 views
0

Je souhaite multiplier tous les nombres dans les lignes contenant « buyPrice: » avec une certaine valeur.nombres se multiplier sur des lignes en correspondance regex

shops: 
blocks: 
    name: "&9&lBlocks (page %page%)" 
    items: 
    1: 
     type: item 
     item: 
     material: GRASS 
     quantity: 64 
     buyPrice: 500 
     sellPrice: 50 
     slot: 0 
    2: 
     type: item 
     item: 
     material: DIRT 
     quantity: 64 
     buyPrice: 500 
     sellPrice: 30 
     slot: 1 
    3: 
     type: item 
     item: 
     material: GRAVEL 
     quantity: 64 
     buyPrice: 500 
     sellPrice: 50 
     slot: 2 

J'ai découvert un morceau de code (voir ci-dessous) qui retourne « buyPrice: NaN » au lieu de « buyPrice: 1000 » etc si j'utilise par exemple un multiplicateur de 2. Je vous serais reconnaissant de l'aide!

addEventListener('load', function() { 
 
document.getElementById('replace').addEventListener('click', function() { 
 
    window.factor = parseInt(prompt('Which factor should the values be multiplied with?', 1)); 
 
    if (factor) { 
 
     var input = document.getElementById('textinput'); 
 
     input.value = input.value.replace(/sellPrice: [0-9]+/g, function(match) { return 'sellPrice: ' + (parseInt(match, 10) * window.factor); }); 
 
    } 
 
}); 
 
});
<button id="replace">Multiply px values</button> 
 
<textarea style="width:100%;height:2000px;" id="textinput"></textarea>

+0

Utilisez 'input.value = input.value.replace (/ buyPrix: (\ d +)/g, fonction (match, group1) { return 'buyPrix:' + (parseInt (group1, 10) * window.factor);} ) ' –

+0

Il a fonctionné! Merci beaucoup! Vraiment apprécier l'aide. – AvidLearner

+0

Heureux que ça a marché pour vous. S'il vous plaît envisager d'accepter la réponse (voir [Comment accepter les réponses SO] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)). –

Répondre

0

Dans le code que vous avez fourni, tout le texte correspondant est analysé comme un numéro alors que vous avez seulement besoin de convertir la séquence de chiffres en nombre. Ainsi, entourer la partie correspondant à deux chiffres avec des parenthèses et passer le deuxième argument de la méthode anonyme:

input.value = input.value.replace(/buyPrice: (\d+)/g, function(match, group1) { 
    return 'buyPrice: ' + (parseInt(group1, 10) * window.factor); 
}); 

Ici, (\d+) capturera 1+ chiffres dans le Groupe 1 et cette valeur sera disponible par l'argument group1.