JavaScript - 替换name属性中第一个方括号之间的值

时间:2016-01-25 14:15:53

标签: javascript regex attributes

我输入的名字是这样的:

<input class="serialize" name="day[0][0]" />
<input class="serialize" name="event[0][0][0][0]" />

我想要做的是替换第一个钳位中的字符(日[ 0 ] [0],事件[ 0 ] [0] [0] [0])......但是夹子中的人物可能会改变......

这是第一个代码草案

jQuery( this ).find( '.serialize' ).each( function( index ) {

    var attr = jQuery( this ).attr( 'name' );
    attr = attr.replace( 'regex magic' ); // This line is the problem
    jQuery( this ).attr( 'name', attr );

} );

1 个答案:

答案 0 :(得分:5)

.attr() method接受一个函数,因此您无需手动迭代每个元素,检索name属性并更新它。

您只需传递一个函数并返回被替换的属性:

$('.serialize').attr('name', function () {
  return this.name.replace(/^(\w+)\[.*?\]/, '$1[20]');
});

表达式/^(\w+)\[.*?\]/将选择一个或多个\w字符后的第一组括号(然后将其捕获然后替换)。

哪会回来:

<input class="serialize" name="day[20][0]">
<input class="serialize" name="event[20][0][0][0]">

作为旁注,\w+将匹配以下一个或多个字符:[a-zA-Z0-9_]。如果字符不同,您可能需要使用:

$('.serialize').attr('name', function () {
  return this.name.replace(/^(.*?)\[.*?\]/, '$1[20]');
});

或者,如果要根据索引更新第一组括号中的值,可以使用:

$('.serialize').attr('name', function (i) {
  return this.name.replace(/^(\w+)\[.*?\]/, '$1[' + i + ']');
});

哪会回来:

<input class="serialize" name="day[0][0]">
<input class="serialize" name="event[1][0][0][0]">
<input class="serialize" name="somethingelse[2][0][0][0]">