从特定格式的字符串获取变量列表

时间:2019-04-28 06:33:46

标签: javascript regex

我有一个复杂的字符串,该字符串可以具有特定格式的变量,因为/##{[^}{\(\)\[\]\-\+\*\/]+?}##/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 个答案:

答案 0 :(得分:2)

根据您的模式,由于##内的部分将不包含花括号,因此只需重复非花括号即可:[^}]+。匹配重复的非方括号字符,然后遍历匹配并提取捕获的组:

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));

答案 1 :(得分:0)

我尝试了以下方法,并且有效:

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)