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

How to alter a regex to be non-greedy (JS)

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

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

但是如果有多个 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>

.*? 更改为 [^=">]*?。即使它不贪心,您也允许它捕获太多。

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

regex101 - 1


如果有多个属性或属性的值类似于 num="something" 那么上面的方法将不起作用,而是使用此 <var( [^=]*="[^"]*")*>(\d+)<\/var>[[[]]] 替换。

regex101 - 2