2016-10-04 2 views
0

Довольно прямой вопрос: существует ли способ выполнить арифметическую операцию над сопоставленной группой в регулярном выражении в JS.арифметическая операция над группой регулярных выражений javascript

Ex: У меня есть строка:

<img style="top:200"> 

Я хочу, чтобы заменить 200 или любой другой номер, разделив на 5, что было бы в этом случае 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) { return '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, но я работаю над устаревшей базой кода, и это очень специфично ... Я бы не рекомендовал это сам .. Но для моего конкретного сценария это единственный путь!!! –

Смежные вопросы