我使用类似ES6的变量格式,语法为${varName}
,在处理它们时,我尝试枚举指定的所有唯一变量,使用以下代码:
function enumVars(txt) {
var v, names = [];
var reg = /\$\{\s*[a-zA-Z\$_][a-zA-Z0-9\$_]*\s*}/g;
while (v = reg.exec(txt)) {
var svn = v[0].replace(/???/, ''); // stripped variable name;
if (names.indexOf(svn) === -1) {
names.push(svn);
}
}
return names;
}
我还没有找到正确的RegExp
来从exec
结果中删除变量名。
当我使用v[0]
时,它会向我提供${varName}
字符串,我需要将其删除为varName
,删除前导${
,尾随}
,以及可能位于变量周围{ }
内的所有空格。
该变量应遵循javascript命名约定,这意味着:
总之,我们可能会将exec
作为${ _$abc12_$ }
返回一个变量,我需要一个RegExp来调用只返回replace
的{{1}}。
感谢大家的帮助!
答案 0 :(得分:1)
您的替换正则表达式可能是
/^\$\{\s*|\s*}$/g
在英语中,这表示“在开头删除${...
,或在结尾删除...}
。
只需抓住所有字符串,然后立即转换所有字符串,然后过滤掉重复字符串就可以轻松一些:
function enumVars(txt) {
return txt
// Find all matches of form ${var}
. match(/\$\{\s*[a-z$_][a-z0-9$_]*\s*}/gi)
// Strip off ${ and }, yielding just variable name
. map(function(v) { return v.replace( /^\$\{\s*|\s*}$/g, ''); })
// Filter out duplicates
. filter(function(v, i, a) { return a.indexOf(v) === i; });
}