2011-06-03 59 views
0

我总是与正则表达式战斗,一些帮助将不胜感激。帮助,Javascript的正则表达式

什么是让所有参数(字开头@)在这样的字符串的最佳方式:预期的结果是

var paramsNames = mdxStatement.match(/(^|\s|-)[email protected](\w+)/g); 

statement : "SELECT @Measure on 0, TOPCOUNT(@Hierarchy.levels(1).member) where @Measure" 

这种表达不能正常工作@测量,@ Hierarchy

非常感谢

回答

3

使用此:

"SELECT @Measure on 0, TOPCOUNT(@Hierarchy.levels(1).member) where @Measure".match(/(@\w+)/g); 

并删除最后一个项目,如果你不需要它。

:)

2

在这情况下,你将使用

var match = string.match(/(@\w+)/g); 

完蛋了

+1

它匹配只有一个字母。 – hsz 2011-06-03 08:14:02

1

什么:

var paramsNames = mdxStatement.match(/(@[a-z]+)/gi); 

抢独特PARAMS做:

var paramsNames = mdxStatement.match(/(@[a-z]+)/gi).unique(); 
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(); 

演示http://jsfiddle.net/gaby/se7Np/1/