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