废话不多说,原理是使用 String.prototype.replace
的第二个参数 replacer: Function
。源码:
function getScope(s) {
var start = /\(([^\(].*?)\)\=\>(\s?)\{/.exec(s).index;
var str = s.substring(start);
var l = 0;
var r = 0;
var end = 0;
str.replace(/(\{|\})/g, (match,match2,offset)=> {
if(end) return "";
if(match==="{") ++l;
if(match==="}") ++r;
if(l===r) return end = offset;
});
return str.substring(0, end+1);
}
此源码匹配传入字符串中第一个箭头函数。示例:
getScope(`
var ada = (p1,p2)=> {
var f = (ps,pf,pa)=> {
return ps;
};
return {p1};
};
var doNotMatchMe = (a,b)=> {
return a+b;
};
`)
结果:
"(p1,p2)=> {
var f = (ps,pf,pa)=> {
return ps;
};
return {p1};
}"
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于