У меня есть переменная строка в таком формате: id={ID}&sdv={sdvsdbsdb.:}
Мне нужно получить содержимое между двумя {
}
и вставить его в массив групп форм.
Шаблон, который я использую, чтобы соответствовать этому: \{([a-zA-Z\:\.]*?)\}
Изначально я использовал более простое регулярное выражение \{(.*?)\}
, но проблема в том, что если вы берете id={ID}&sdv={sdvsdbsdb.:}
и удаляете первое }
, оно будет соответствовать всей строке от первого {
до первого }
.
Функция, которую я использую для этого, такова:
while ((matched_parameter = pattern.exec(redirect_string)) != null) {
let redirect_found: boolean = false;
for (let index in parameters.controls) {
if (parameters.controls[index].value['key'] == matched_parameter[1]) {
redirect_found = true;
break;
}
}
if (!redirect_found && matched_parameter[1] != '') {
(<FormArray>this.form_group.get('parameters')).controls.unshift(this.form_builder.group({
"key": matched_parameter[1],
"internal": false,
"source": "record",
"field": "panelist_id",
"varies_by_status": false
}));
}
}
Это работает и соответствует любому из параметров, которых уже нет в списке, но когда он говорит, что добавил в массив, новое значение не появляется.