我总是与正则表达斗争,一些帮助将不胜感激。
在字符串中获取所有参数(以@开头的单词)的最佳方法是什么:
statement : "SELECT @Measure on 0, TOPCOUNT(@Hierarchy.levels(1).member) where @Measure"
此表达式无效:
var paramsNames = mdxStatement.match(/(^|\s|-)+@(\w+)/g);
预期结果是:@ Measure,@ Hierarchy
提前多多感谢
答案 0 :(得分:3)
使用此:
"SELECT @Measure on 0, TOPCOUNT(@Hierarchy.levels(1).member) where @Measure".match(/(@\w+)/g);
如果您不需要,请删除最后一项。
:)
答案 1 :(得分:2)
在这种情况下,您将使用
var match = string.match(/(@\w+)/g);
多数民众赞成
答案 2 :(得分:1)
怎么样:
var paramsNames = mdxStatement.match(/(@[a-z]+)/gi);
要抓住唯一的参数:
var paramsNames = mdxStatement.match(/(@[a-z]+)/gi).unique();
答案 3 :(得分:1)
我相信
/@\b.+?\b/g
应该做你想做的事情
Array.prototype.unique = function() {
var o = {}, i, l = this.length, r = [];
for(i=0; i<l;i+=1) o[this[i]] = this[i];
for(i in o) r.push(o[i]);
return r;
};
var string = "SELECT @Measure on 0, TOPCOUNT(@Hierarchy.levels(1).member) where @Measure";
var pattern = /@\b.+?\b/g;
var params = string.match(pattern).unique();