是否可以使用正则表达式将1
替换为2
?第一个括号中的值将始终为整数。我开始使用str.split('[')
这样做,并意识到这不是最好的方法。
编辑 - 第一个括号中的值可以是任何整数。此字符串基本上是大动态表单中表单字段的名称属性。表单由行中的字段组成,第一个括号中的数字表示行。通过克隆最后一行添加新的字段行,但需要在name属性中更新行索引。
value[1][some_string]
答案 0 :(得分:2)
(value)\[(\d+)
试试这个。参见demo。替换$1[<any number>
http://regex101.com/r/tF5fT5/56
var re = /(value)\[(\d+)/gm;
var str = 'value[1][some_string]';
var subst = '$1[2';
var result = str.replace(re, subst);
答案 1 :(得分:0)
更好地使用替换......
这将取代第一场比赛:
str.replace("1","2");
这会将所有1
替换为2
。
var patt = new RegExp("1", "g");
str.replace(patt, "2");
答案 2 :(得分:0)
关于您更新的问题,请尝试:
function inc_cnt(s){return Number(s)+1;}
elm.name=elm.name.replace(/\d+(?=\]\[)/, inc_cnt);
*(假设elm
是您的克隆元素)
此正则表达式将匹配第一次出现:任何数字后跟 ][
(例如,它只会与26
中的value[26][some_val_42][foo_bar]
匹配。
然后将此匹配传递给函数inc_cnt
,该函数接受表示十进制数的字符串,将其转换为数字并将其加1,将结果数返回给替换方法
(有效地自动递增你的计数器)。
注意,或者inc_cnt
的有效负载可以更改为return parseInt(s, 10)+1
或者您可以依靠强制功能并执行return +s+1
。
根据您的编码风格,您可以将其重新计算为:
elm.name=elm.name.replace(/\d+(?=\]\[)/, function(s){return +s+1});
另请注意仅:<a>
,<applet>
,<button>
,<form>
,<frame>
,{{1} },<iframe>
,<img>
,<input>
,<map>
,<meta>
,<object>
,<param>
和<select>
支持直接获取/设置名称属性(通过<textarea>
)
其他元素需要elm.name
和getAttribute()
方法。
希望这有帮助!