正则表达式:创建匹配模式的问题

时间:2009-02-27 07:17:12

标签: javascript regex

有一些问题要弄清楚正则表达式与此匹配:

function Array() { [native code] }

我试图只匹配“数组”所在的文本。

3 个答案:

答案 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

之前的空格