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

标签 javascript jquery html regex string

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

<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...

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

/(?<=\[)[^\]]*(?=\])/g

但这会匹配所有出现的情况,而我需要做的是以某种方式找到并替换第 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;
    }));
});

最佳答案

这是另一种可能的解决方案。您可以向 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!";

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

关于javascript - 查找并替换字符串中第 n 次出现的 [bracketed] 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10584748/

相关文章:

javascript - 我可以更改 iframe 中包含的元素的样式,而该 iframe 本身又包含在外部 HTML 中吗?

javascript - 谷歌地图 API : Polyline on "Editcomplete"

c# - 使用JSON将方括号符号数组从JavaScript转换为C#?

javascript - 当 Mac 设置(不是浏览器设置)拒绝位置共享时,HTML5 Geolocation API 悄然失败

javascript - 创建日历后更改默认日期(fullcalendar)

javascript - 有没有支持HTML内容并自动定位tooltips的JQuery tooltip插件?

javascript - 禁用单选按钮组中的按钮

html - 滚动问题滚动不起作用

javascript - 三元运算符是否可以等效于与逻辑运算符短路?

javascript - 如何使用 angularjs 将表单数据从一个页面发送到另一个页面