2016-10-04 2 views
0

Ziemlich einfache Frage: Gibt es eine Möglichkeit, arithmetische Operation auf einer übereinstimmenden Gruppe in Regex in JS durchzuführen.arithmetische Operation auf Regex-Gruppe Javascript

Ex: Ich habe string:

<img style="top:200"> 

Ich möchte von 5 was auch immer Nummer 200 oder ersetzen durch Division, die 40 in diesem Fall wäre. So Ausgabe:

<img style="top:40"> 

Ich habe versucht:

var d= c.replace(/top:([-]?\d*[\.]?\d*)/,'int:'+parseInt($1/5)+'px') 

Aber ich bekomme

<img style="top:NaNpx"> 
+2

Warum würden Sie verwenden regex HTML und CSS zu analysieren? – adeneo

+0

In diesem Fall ist es ein gut definierter Text, der nicht zu viele Probleme darstellen sollte. Es ist nicht so, als würde er versuchen, einen ganzen HTML-Syntaxbaum zu parsen. –

+0

Verwenden Sie einen Callback mit der Methode replace 'var c = ''; var d = c.replace (/ top: ([-]? \ D * [\.]? \ D *) /, Funktion (m, m1) { return 'top:' + m1/5 + ' px '; }); '..... aber es ist eine schlechte Idee, Regex zum Parsen von HTML zu verwenden –

Antwort

2

Sie können eine Callback-Funktion mit String#replace Methode verwenden.

var c = '<img style="top:40">'; 
 

 
var d = c.replace(/top:([-]?\d*[\.]?\d*)/, function(m, m1) { 
 
    return 'top:' + m1/5 + 'px'; 
 
}); 
 

 
console.log(d);


FYI: Aber es ist eine schlechte Idee Regex zu verwenden, um HTML zu analysieren.


Ein weiteres Verfahren mit DOMParser wo das Verfahren nur statt auf die gesamte Kette von der Anwendung für den Stil Attributwert ersetzen Anwendung.

var c = '<img style="top:200">'; 
 

 
var parser = new DOMParser(); 
 

 
var img = parser.parseFromString(c, "text/html") 
 
    .querySelector('img'); 
 

 
img.setAttribute('style', img.getAttribute('style').replace(/\btop:([-]?\d*(\.\d+)?)/, function(m, m1) { 
 
    return 'top:' + m1/5 + 'px'; 
 
})) 
 

 

 
console.log(img.outerHTML)

+0

Beat mich um 5 Sekunden: P –

+0

@pranav Ik, aber ich arbeite an Legacy-Code-Basis und es ist sehr spezifisch ... Ich würde das nicht selbst ermutigen..Aber, für mein besonderes Szenario ist dies das einzige Weg!!! –

Verwandte Themen