我有一个格式如下的变量字符串:id={ID}&sdv={sdvsdbsdb.:}
我需要获取两者之间的内容{
}
并将其推送到表单组数组中。
我用来匹配这个的模式是\{([a-zA-Z\:\.]*?)\}
最初我使用的是一个更简单的正则表达式\{(.*?)\}
,但问题是如果你取id={ID}&sdv={sdvsdbsdb.:}
并删除第一个}
,它将匹配从 first{
到 first的整个字符串}
。
我用来执行此操作的功能是:
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
}));
}
}
这确实有效并匹配列表中已经没有的任何参数,但是当它说它添加到数组时,新值不会出现。