2016-10-04 88 views
0

相當直接的問題:有沒有一種方法可以對JS中的正則表達式中的匹配組執行算術運算。在正則表達式組上的算術運算javascript

例如:我有字符串:

<img style="top:200"> 

我想除以5,以取代200或任何數字,這將是40在這種情況下。所以輸出:

<img style="top:40"> 

我想:

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

,但我得到

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

你爲什麼要使用正則表達式來解析HTML和CSS? – adeneo

+0

在這種情況下,它是一個明確定義的文本,不應該出現太多問題。這不像他試圖解析整個HTML語法樹。 –

+0

使用回調替換方法'var c =''; var d = c.replace(/ top:([ - ]?\ d * [\。]?\ d *)/,function(m,m1){'top:'+ m1/5 +'' px'; });'.....但是使用正則表達式來解析html –

回答

2

您可以使用一個回調函數String#replace方法。

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:但它是一個壞主意,使用正則表達式來解析HTML。


的另一種方法與DOMParser其中施加所述替換方法只對風格屬性值而不是施加到整個字符串。

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

5秒內打我:P –

+0

@pranav Ik但是,我正在致力於遺留代碼基礎,它非常具體...我不會鼓勵這個自己..但是,對於我的特殊情況,這是唯一的辦法!!! –