繁体   English   中英

无法使用RegEx将索引值放在方括号内

[英]Can't put index value inside brackets using 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,并寻求有关如何解决该问题的建议

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

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

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) 

由于您想匹配[]首次出现,因此请勿使用g标志。 也不需要匹配其他任何内容(.+?) ,只需/\\[\\]/就足够了。

另一种方法是将字符串[]替换为[1]

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

reg exp /\\[(.+?)\\]/g匹配[]括号之间的1个或多个/\\[(.+?)\\]/g 您想彼此相邻检测[] 只是:

/\[\]/

另外,除非要对所有出现的[] 进行替换,否则您要在结尾处放弃g - g表示global

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM