这种正则表达式替换的好方法

时间:2012-05-02 15:11:51

标签: javascript regex

我正在编写一个javascript函数,它接受一个正则表达式和一些与正则表达式匹配name属性的元素。

假设我已通过此正则表达式

/cmw_step_attributes\]\[\d*\]/

和一个像这样结构的字符串

"foo[bar][]chicken[123][cmw_step_attributes][456][name]"

所有数字可能会有所不同或缺失。我想将正则表达式与字符串相匹配,以便将456换成另一个数字(这会有所不同),例如789.所以,我想最终得到

"foo[bar][]chicken[123][cmw_step_attributes][789][name]"

正则表达式将匹配字符串,但我无法换掉789的整个正则表达式,因为这将消除“[cmw_step_attributes] [”位。必须有一个干净简单的方法来做到这一点,但我无法理解它。有什么想法吗?

谢谢,最大

4 个答案:

答案 0 :(得分:2)

捕获第一部分并将其放回字符串中。

.replace(/(cmw_step_attributes\]\[)\d*/, '$1789');
// note I removed the closing ] from the end - quantifiers are greedy so all numbers are selected
// alternatively:
.replace(/cmw_step_attributes\]\[\d*\]/, 'cmw_step_attributes][789]')

答案 1 :(得分:1)

要么在字面上重写必须在替换字符串中保持相同的部分,要么将其放在捕获括号内并在替换中引用它。

答案 2 :(得分:1)

见答案:Regular Expression to match outer brackets

  

正则表达式是该作业的错误工具,因为您正在处理嵌套结构,即递归。

答案 3 :(得分:1)

你试过了吗?

var str = 'foo[bar][]chicken[123][cmw_step_attributes][456][name]';
str.replace(/cmw_step_attributes\]\[\d*?\]/gi, 'cmw_step_attributes][XXX]');