0
我正在使用类似于ES6的变量格式与语法${varName}
,并在处理它们时,我试图枚举指定的所有唯一变量,使用以下代码:正则表达式剥离类似ES6格式的变量
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_$ }
一个变量,我需要调用replace
一个RegExp,将只返回_$abc12_$
。
感谢大家的帮助!
这似乎工作,谢谢!至于英文,至少,没有跳过解释变量可以构成的部分,因为这确实会影响答案。 – 2015-04-04 03:40:56
根据您的更改,我必须说我必须将'\}'更改为'}',并且替代'enumVars'不适用于我。首先,它没有'''关闭'map'调用,然后它发生 - 什么是uniq? :)除此之外,它看起来非常整齐,我只是钓鱼它工作:) – 2015-04-04 03:45:05
我已经做了前面描述的变化,除了'uniq()'部分,它会引发错误。请将其改为工作。 – 2015-04-04 04:50:35