Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery搜索替换字符串_Javascript_Jquery_Replace - Fatal编程技术网

Javascript jQuery搜索替换字符串

Javascript jQuery搜索替换字符串,javascript,jquery,replace,Javascript,Jquery,Replace,我试图在克隆函数中重命名一些字段,但我不确定如何重命名(增加)字段名 var tr = $copy.clone(); tr('input').each(function() { console.log(this.name); this.name = something; }); 字段名示例: field[subform][0][subsubform][2][name] 在这种情况下,我需要将[2]增加到[3]。这个名字可以有更多或更少的括号,但它总是我需要增加的第二个最后一个 如何

我试图在克隆函数中重命名一些字段,但我不确定如何重命名(增加)字段名

var tr = $copy.clone();
tr('input').each(function() {
  console.log(this.name); 
  this.name = something;
});
字段名示例:

field[subform][0][subsubform][2][name]
在这种情况下,我需要将
[2]
增加到
[3]
。这个名字可以有更多或更少的括号,但它总是我需要增加的第二个最后一个


如何执行此操作?

假设它始终位于字符串末尾的
[…]
之前:

name.replace(/\[(\d+)\](\[[^\[]+\])$/, function (pattern, value, tail) {
    return "[" + (parseInt(value, 10) + 1) + "]" + tail;
});​

如果总是倒数第二个,你可以这样做

var name = 'field[subform][0][subsubform][2][name]';
var firstStr = name.split('][').slice(0,-2);
var secStr = name.split('][').slice(-2);
secStr[0] = +secStr[0] +1; 
console.log(firstStr.concat(secStr).join(']['));

还是像这样

var name = 'field[subform][0][subsubform][2][name]';
var str = name.split('][');
str[str.length - 2] = +str[str.length - 2] + 1;
str = str.join('][');
console.log(str);

使用
indexOf
substr

下面的代码获取数字前字符串的第一部分、数字和数字后的字符串。然后在数字上加1,然后对所有内容进行合并

var string = "field[subform][0][subsubform][2][name]",
    beg = string.indexOf("subsubform][") + 12,
    end = string.indexOf("]", beg);
string = string.substr(0, beg) + (parseInt(string.substr(beg, end)) + 1) + string.substr(end);

正则表达式很有趣。匹配行尾的模式[number][string],读取数字,添加一个,连接匹配的其他部分,并设置新名称

$(tr).find("input").prop("name", function() {
    return this.name.replace(
        /\[(\d+)(\]\[[^[]+]$)/,
        function (a,b,c) { 
            return "[" + (parseInt(b,10)+1) + "]" +  c;
        }
    )
});

将该数字存储在
数据-
属性中。不幸的是,无法将其设置为数据属性,因为我使用的是复杂的表单框架。这将是一个很好且简单的解决方案。我们怎么知道不将
[0]
增加到
[1]
?请在表单框架的上下文中向我们展示该函数。如果突然有更多的括号开始,这将不起作用?@charliexx如果您的模式要更改,则需要更灵活的解决方案。我更新了答案,改为包含正则表达式。