替换方括号中的文本,但不替换在紧随其后的文本中

时间:2013-12-20 20:00:50

标签: javascript regex

我有一些与此类似的HTML:

<input value="" name="test[0][test_inner_one]" type="text">
<input value="" name="test[0][test_inner_two]" type="text">
<input value="" name="test[0][test_inner_three]" type="text">

我要做的只是用其他东西替换0,但我无法想象正则表达式。
因此,例如,在替换之后,它应该看起来像:

<input value="" name="test[1][test_inner_one]" type="text">
<input value="" name="test[1][test_inner_two]" type="text">
<input value="" name="test[1][test_inner_three]" type="text">

整个事情的想法是我正在克隆HTML,0和它之前的文本不会是静态的,所以例如它不会总是test[0]但它会是在以下格式some_text[index][some_other_text]中,我只需要替换“索引” 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:7)

看起来你可以简单地使用它:

var newName = name.replace(/\[0]/, '[1]');

或者甚至更简单地说,摆脱正则表达式:

var newName = name.replace('[0]', '[1]');

<强>更新

要替换仅包含数字的任何大括号,请使用以下内容:

var newName = name.replace(/\[\d+]/, '[1]');

要仅替换第一对括号的内容,无论其包含什么,您都可以使用此

var newName = name.replace(/\[.*?]/, '[1]');

这是有效的,因为replace方法只会替换找到的第一个匹配项(除非在正则表达式中启用了g标志)。

答案 1 :(得分:3)

如果您只想替换第一次出现,只需发布​​/g修饰符:

var str = 'my[bar][string]';

str = str.replace(/\[.*?\]/, '[foo]');

console.log(str); //my[foo][string] 

尸检:

  • \[一个文字[字符 - 我们必须逃避这一点,因为[是一个保留的正则表达式字符
  • .*?懒人比赛。匹配尽可能少
  • \]一个文字]字符 - 我们必须逃避这一点,因为]是一个保留的正则表达式字符