不能使用RegEx将索引值放在括号内

时间:2018-05-14 21:21:34

标签: javascript regex

有两个字符串。我试图将索引值放在空括号中:

var capacity = 'room[price_group_ids][][capacity]';
var group = 'room[price_group_ids][][group][%s][]';

例如,如果索引为1,则它们应为:

var capacity = 'room[price_group_ids][1][capacity]';
var group = 'room[price_group_ids][1][group][%s][]';

如果索引是2,它们应如下所示:

var capacity = 'room[price_group_ids][2][capacity]';
var group = 'room[price_group_ids][2][group][%s][]';

我尝试了什么,并给出了意想不到的结果:

var index = 2;

var capacity = 'room[price_group_ids][][capacity]'.replace(/\[(.+?)\]/g, "[" + index +"]"); // Should become room[price_group_ids][2][capacity]
var group = 'room[price_group_ids][][group][%s][]'.replace(/\[(.+?)\]/g, "[" + index +"]"); // Should become room[price_group_ids][2][group][%s][]

我不擅长RegEx并寻求有关如何解决该问题的建议

3 个答案:

答案 0 :(得分:1)

一个简单的replace应该可以在这里工作。

这只会替换[]的第一次出现,因此您不必担心其他人。 g标志用于替换全局i-e指定值的所有出现次数

capacity.replace('[]', `[${index}]`);



var index = 2;
var capacity = 'room[price_group_ids][][capacity]';
var group = 'room[price_group_ids][][group][%s][]';

capacity = capacity.replace('[]', `[${index}]`);
group = group.replace('[]', `[${index}]`);

console.log(capacity)
console.log(group)




答案 1 :(得分:1)

由于您希望首次匹配[],因此请勿使用g标记。也不需要匹配任何其他内容(.+?),只需/\[\]/即可。

另一种方法是简单地用[]

替换字符串[1]



let index = 2
console.log('room[price_group_ids][][capacity]'.replace(/\[\]/, `[${index}]`));
console.log('room[price_group_ids][][group][%s][]'.replace(/\[\]/, `[${index}]`));




答案 2 :(得分:1)

reg exp /\[(.+?)\]/g匹配[]括号之间的任何内容中的1个或更多内容。您希望彼此相邻地检测到[];简单地:

/\[\]/

此外,您希望最后放弃g,除非您希望替换{em>所有次[] - g表示global

但也有非正则表达式方法,如其他答案所示。