有一些问题要弄清楚正则表达式与此匹配:
function Array() { [native code] }
我试图只匹配“数组”所在的文本。
答案 0 :(得分:4)
您是否试图找出javascript中变量的类型?如果这是你想要的,你可以将对象的构造函数与你认为创建它的构造函数进行比较:
var array = new Array();
if(array.constructor == Array)
alert("Is an array");
else
alert("isn't an array");
这不是javascript中最好的方法。 Javascript没有像C#这样的类型系统,它保证变量将由某个构造函数创建某些成员,因为javascript是一种非常动态的语言,并且对象从其构造函数获取的任何内容都可以在运行时被覆盖。
相反,最好使用鸭子打字并询问对象他们可以做什么而不是他们是什么: http://en.wikipedia.org/wiki/Duck_typing
if(typeof(array.push) != "undefined")
{
// do something with length
alert("can push items onto variable");
}
答案 1 :(得分:3)
在Perl中,您将使用:
m/^\s*function\s+(\w+)\s*\(/;
变量“$1
”将捕获函数名称。
如果function
关键字可能不在该行的开头,那么您必须更加努力地工作。
[编辑:添加了两个“\s*
”序列。]
关于这是否有效的问题......这是我的测试用例:
测试脚本:
while (<>)
{
print "$1\n" if (m/^\s*function\s+(\w+)\s*\(/);
}
测试输入行(是的,故意错位):
function Array() { ... }
function Array2 () { ... }
func Array(22) { ... }
测试输出:
Array
Array2
在Solaris 10(SPARC)上使用Perl 5.10.0进行测试:我不相信平台或版本是一个重要因素 - 我希望它在任何合理的Perl版本上都能正常工作。
答案 2 :(得分:0)
所以随后,我已经得到了这几乎可以工作:
[function\s]((\S+)+)(?=\(\))
但是,它仍然匹配Array
之前的空格