如何将正则表达式改为非贪婪(JS)

时间:2016-08-24 00:19:03

标签: javascript regex regex-greedy

我正在尝试用属性替换var标记,以便将它们包装在方括号中

data.replace(/<var .*?="">(\d+)<\/var>/ig, '[[[$1]]]');

但如果有多个var标记,则无效。例如,

<var id-0=""></var> responds <span id-1="">in <var num="">1</var> days</span>

将导致

[[[1]]] days</span>

但我需要的结果是

<var id-0=""></var> responds <span id-1="">in [[[1]]] days</span></strong>

2 个答案:

答案 0 :(得分:2)

使用 <var [^=]*="">(\d+)<\/var>

regex101 - 1

如果有多个属性,或者该属性的值类似于num="something",那么上面的内容将无效,请使用此 <var( [^=]*="[^"]*")*>(\d+)<\/var> [[[$2]]] 代替。

regex101 - 2

答案 1 :(得分:1)

.*?更改为[^=">]*?。即使它不贪心,你也可以捕获它太多了。