RegExp 以类似 ES6 的格式去除变量
RegExp to strip a variable in ES6-like format
我正在使用语法为 ${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_$ }
的变量 return,我需要一个用于调用 replace
的正则表达式 return 只是 _$abc12_$
.
感谢大家的帮助!
您的替换正则表达式可以是
/^$\{\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; });
}
我正在使用语法为 ${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_$ }
的变量 return,我需要一个用于调用 replace
的正则表达式 return 只是 _$abc12_$
.
感谢大家的帮助!
您的替换正则表达式可以是
/^$\{\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; });
}