我有以下字符串:
foo_0_13
foz[0][bar][]
far_0
我有一个约定,需要匹配来自foo_0_13
和far_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?
答案 0 :(得分:2)
您可以尝试以下正则表达式替换。
var res = str.replace(/("[a-z]+[_[])\d+/g, '$01' + '1'); // 1 = new digit
See regex demo at regex101或js fiddle
在替换中,我使用'$01' + '1'
只是为了将后向引用组1与新添加的数字分开。实际上,替换将是$11
或$011
,其中最后一个to be preferred。
答案 1 :(得分:1)
答案 2 :(得分:0)
如果您正在使用拉动组的实现,则可以将可能的第二个下划线和数字隔离在组外。
如果不了解正则表达式的实现或语言,很难给出完美的答案。
示例:
(_\d)_*|(\[\d\])