匹配第一个下划线后跟一个数字并替换html中的匹配集

时间:2016-02-21 19:06:09

标签: javascript html regex

我有以下字符串:

foo_0_13
foz[0][bar][]
far_0

我有一个约定,需要匹配来自foo_0_13far_2等字符串的下划线和后面的数字,例如_0_2 ...并且结构为foz[0][bar][]foz[3]的任何字符串我需要匹配[0][3]

我已尝试((\_\d)|\[\d\])但匹配_0_1,我怎样才能使其仅匹配_0

我只需要找到第一次出现的“下划线数字”组合。

第二部分:

如果我的html分部多次出现_0[0]

<div id="foo_0_13" name="bar[0][xxx][]"> <p id="par_0">Test</p> </div>

我需要用_1替换所有这些事件,以便html变为

<div id="foo_1_13" name="bar[1][xxx][]"> <p id="par_1">Test</p> </div>

我怎么能详细说明这个以获得所需的HTML知道我正在使用javascript?

3 个答案:

答案 0 :(得分:2)

您可以尝试以下正则表达式替换。

var res = str.replace(/("[a-z]+[_[])\d+/g, '$01' + '1'); // 1 = new digit

See regex demo at regex101js fiddle

在替换中,我使用'$01' + '1'只是为了将后向引用组1与新添加的数字分开。实际上,替换将是$11$011,其中最后一个to be preferred

答案 1 :(得分:1)

从字符串的开头开始。在非捕获组中不正确地匹配所有内容,直到遇到任何匹配的模式。

(?:^.*?)(_\d|\[\d\])

演示和细分:https://regex101.com/r/cT6qX2/1

答案 2 :(得分:0)

如果您正在使用拉动组的实现,则可以将可能的第二个下划线和数字隔离在组外。

如果不了解正则表达式的实现或语言,很难给出完美的答案。

示例:

(_\d)_*|(\[\d\])