1

我正在编写一个 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

4 回答 4

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]')
于 2012-05-02T15:14:49.727 回答
1

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

于 2012-05-02T15:15:02.830 回答
1

见答案:正则表达式匹配外括号

正则表达式对于这项工作来说是错误的工具,因为您正在处理嵌套结构,即递归。

于 2012-05-02T15:15:12.840 回答
1

你有没有尝试过:

var str = 'foo[bar][]chicken[123][cmw_step_attributes][456][name]';
str.replace(/cmw_step_attributes\]\[\d*?\]/gi, 'cmw_step_attributes][XXX]');
于 2012-05-02T15:15:47.993 回答