废话不多说,原理是使用 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}; }"
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于