Javascript 在匹配整个函数时捕获函数名
这个正则表达式Javascript 在匹配整个函数时捕获函数名,javascript,regex,node.js,Javascript,Regex,Node.js,这个正则表达式 /function\s*\(\s*\S*\s*\)\s*\{/ 应该匹配一个单参数函数,比如 function foo ( xyz ) { (请注意,“\S”将匹配任何非空白字符,我们可以假设原始代码使用可接受的字符是正确的,因此可以) 我的问题是,如何匹配这样一行文本 “baz函数foo(xyz){bar” 并抓住这两个方面: "function foo ( xyz ) {" 及 换句话说,我希望以某种方式匹配函数签名的开头,并捕获函数的名称 我不知道该怎么做 “简单”的
/function\s*\(\s*\S*\s*\)\s*\{/
应该匹配一个单参数函数,比如
function foo ( xyz ) {
(请注意,“\S”将匹配任何非空白字符,我们可以假设原始代码使用可接受的字符是正确的,因此可以)
我的问题是,如何匹配这样一行文本
“baz函数foo(xyz){bar”
并抓住这两个方面:
"function foo ( xyz ) {"
及
换句话说,我希望以某种方式匹配函数签名的开头,并捕获函数的名称
我不知道该怎么做
“简单”的方法是这样做:
var match = str.match(regex); // "function foo ( xyz ) {"
var start = 7; // "function" has two 'n's unfortunately
var end= match[0].indexOf('(');
var result = String(match[0]).substring(start,end).trim();
但是我正在寻找一种可能不太老套的方法。您可以使用这样的捕获组捕获函数签名和函数名 Regex:
函数\s+([^(]+)\s*\(\s*[^)]+\s*\)\s*{
说明:
匹配标记函数开始的关键字function\s+
function
匹配并捕获第一组中函数的名称。可以使用([^(]+)
或\1
反向引用$1
匹配rest,直到满足打开的花括号\s*\(\s*[^)]+\s*\)\s*{
{
您可以使用以下功能:
(function\s*(\S+)?\s*\(\s*\S+\s*\)\s*\{)
看
捕获组1将包含函数foo(xyz){
,捕获组2将包含foo
编辑:已更新匿名函数试试这个
(function\s+([^\(\s]+).*?\)\s*\{)
var myval=“baz函数foo(xyz){bar”;
var regex=/(函数\s+([^\(\s]+).*?\)\s*\{)/mg
while(matches=regex.exec(myval)){
document.writeln(匹配[1])//函数定义
document.writeln(匹配[2])//函数名
}
谢谢,我试过了,我不认为它与这行代码“在(函数(d){”之后”匹配,知道为什么吗?@AlexMills:因为它是一个匿名函数,没有名字。废话,我应该规定这个,如果没有名字,你能让它工作吗?我想把它从(\s+)改为(\s*)?嗯,这个(\s+)比(\s*)有优势吗?谢谢,如果它是匿名函数,它会工作吗?
(function\s+([^\(\s]+).*?\)\s*\{)