Получить список переменных из строки определенного формата - PullRequest
1 голос
/ 28 апреля 2019

У меня есть сложная строка, которая может иметь переменную в определенном формате, как /##{[^}{\(\)\[\]\-\+\*\/]+?}##/g Я хочу извлечь эти переменные в массив.

, например

var x= "sgsegsg##{xx}gerweg##{xx1}##rgewrgwgwrg}##ferwfwer##{xx2}rgrg##{xx3}####{xx4}####{errg}}}";

function getVariableNames (param) {
   return param.match(/(##{[^}{\(\)\[\]\-\+\*\/]+?}##)+?/g)
}

getVariableNames(x); 

выше строк возвращает ["##{xx1}##", "##{xx3}##", "##{xx4}##"]

где я хочу получить ['xx1', 'xx3', 'xx4']

Ответы [ 2 ]

2 голосов
/ 28 апреля 2019

Исходя из вашего шаблона, поскольку часть внутри ## s не будет содержать фигурные скобки, достаточно просто повторять не фигурные фигурные скобки: [^}]+.Сопоставьте повторяющиеся символы без скобок, а затем выполните итерацию по совпадениям и извлеките захваченную группу:

const str = "sgsegsg##{xx}gerweg##{xx1}##rgewrgwgwrg}##ferwfwer##{xx2}rgrg##{xx3}####{xx4}####{errg}}}";
const pattern = /##{([^}]+)}##/g;
let match;
const matches = [];
while (match = pattern.exec(str)) {
  matches.push(match[1]);
}
console.log(matches);

В более новых средах вы можете посмотреть вместо ##{:

const str = "sgsegsg##{xx}gerweg##{xx1}##rgewrgwgwrg}##ferwfwer##{xx2}rgrg##{xx3}####{xx4}####{errg}}}";
const pattern = /(?<=##{)[^}]+(?=}##)/g;
console.log(str.match(pattern));
0 голосов
/ 28 апреля 2019

Я попробовал это со следующим, и это сработало:

var x= "sgsegsg##{xx}gerweg##{xx1}##rgewrgwgwrg}##ferwfwer##{xx2}rgrg##{xx3}####{xx4}####{errg}##{xx5(}####{xx-6}####{xx7}##}}";

function getVariableNames (str) {
    let variables = str.match(/(##{[^}{)(\]\[\-+*\/]+?}##)+?/g);
    return variables && variables.length  ? variables.map(i=>i.substring(3, i.length - 3)) : false;
}

getVariableNames(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...