正则表达式组javascript的算术运算

时间:2016-10-04 05:45:05

标签: javascript regex concatenation grouping

相当直截了当的问题:有没有办法在JS中的regex中对匹配的组执行算术运算。

Ex:我有字符串:

<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">

1 个答案:

答案 0 :(得分: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);

仅供参考:但使用正则表达式来解析HTML是一个坏主意。

使用DOMParser的另一种方法,仅将替换方法应用于style属性值,而不是应用于整个字符串。

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)