在字符串中查找并替换第n次出现的[bracketed]表达式

DJ *_*sca 11 html javascript regex string jquery

我有一个表单,其中名称属性得到更新,但问题是使用多维值,如下所示:

<input type="text" name="questions[0][question]" />
<input type="text" name="questions[0][order]" />
<input type="text" name="questions[0][active]" />
<input type="text" name="answers[0][1][answer]" />
<input type="text" name="answers[0][2][answer]" />
<input type="text" name="answers[0][3][answer]" />

<input type="text" name="questions[1][question]" />
<input type="text" name="questions[1][order]" />
<input type="text" name="questions[1][active]" />
etc...
Run Code Online (Sandbox Code Playgroud)

我需要使用JavaScript更改方括号内的值,无论它们处于什么位置.我尝试使用以下正则表达式来匹配方括号之间的值:

/(?<=\[)[^\]]*(?=\])/g
Run Code Online (Sandbox Code Playgroud)

但这匹配所有出现,我需要做的是以某种方式找到并替换第n次出现.

或者,如果有另一种方法来查找和替换方括号内的值而不使用正则表达式我都是耳朵.

提前致谢

解决

最终的代码如下:

$('input', this).each(function(){
    var name = $(this).attr('name');
    var i = 0;
    $(this).attr('name', name.replace(/\[.+?\]/g,function (match, pos, original) {
    i++;
    return (i == 1) ? "[THE REPLACED VALUE]" : match;
    }));
});
Run Code Online (Sandbox Code Playgroud)

Dan*_*don 35

这是另一种可能的解决方案 您可以将string.replace函数传递给函数以确定替换值应该是什么.该函数将传递三个参数.第一个参数是匹配文本,第二个参数是原始字符串中的位置,第三个参数是原始字符串.

以下示例将"HELLO,WORLD"中的第二个"L"替换为"M".

var s = "HELLO, WORLD!";
var nth = 0;
s = s.replace(/L/g, function (match, i, original) {
    nth++;
    return (nth === 2) ? "M" : match;
});
alert(s); // "HELMO, WORLD!";
Run Code Online (Sandbox Code Playgroud)

请参阅MDN:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace

  • 这太棒了,帮了我很多,但我需要替换**每个**的第n个角色.为此,我将`(nth === 2)`替换为`(nth%2 === 0)` (2认同)