有两个字符串。我试图将索引值放在空括号中:
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并寻求有关如何解决该问题的建议
答案 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
。
但也有非正则表达式方法,如其他答案所示。