javascript中正则表达式和ruby中的一点差异

时间:2022-10-29 13:14:45

看到一个例子,不过这个例子中正则表达式的格式貌似是错的:

Function.prototype.get_name = function(){
return this.name || this.toString().match(/function\s*(\[^()*](/)[1];
}

代码的原意是给任意有名的Function实例对象添加返回其名称的方法get_name;不过其中正则的格式不怎么对,简单思考了一下很快用ruby语法写出了:

s = "function foo(x){...}"
s.match(/function\s*(.*)\(/)[1] #返回"foo"

不过同样的正则格式在js中取得不对,貌似是贪婪的获取啊!?那么直接在*后面加?号吧:

foo.toString().match(/function\s*(.*?)\(/)

总结一下,js中正则默认是贪婪模式,而ruby中则比较“谨慎”,这就是正则引擎的不同吗? :)