在匹配整个function时捕获函数的名字
这个正则expression式
/function\s*\(\s*\S*\s*\)\s*\{/
应该匹配一个单一的参数函数,像
function foo ( xyz ) {
(注意“\ S”将匹配任何非空白字符,并且我们可以假定原始代码在使用可接受的字符时是正确的,所以没关系)
我的问题是,我怎么能像这样匹配一行文字
“baz function foo(xyz){bar”
并捕获这两个:
"function foo ( xyz ) {"
和
"foo"
换句话说,我想以某种方式匹配函数签名的开始,以及捕获函数的名称。
我不知道如何做到这一点。
“简单”的方法是做类似的事情:
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();
但是我正在寻找一个不太冒险的方式。
您可以使用这样的捕获组来捕获函数签名和函数名称。
正则expression式: function\s+([^(]+)\s*\(\s*[^)]+\s*\)\s*{
说明:
-
function\s+
匹配标记函数开始的关键字函数。 -
([^(]+)
匹配并捕获第一组中的函数名称,可以使用\1
或$1
反引用。 -
\s*\(\s*[^)]+\s*\)\s*{
rest直到开启大括号{
Regex101演示
尝试这个
(function\s+([^\(\s]+).*?\)\s*\{)
正则expression式演示
var myval = "baz function foo ( xyz ) { bar"; var regex = /(function\s+([^\(\s]+).*?\)\s*\{)/mg while (matches = regex.exec(myval)) { document.writeln(matches[1]) //function definition document.writeln(matches[2]) //function name }
您可以使用以下内容:
(function\s*(\S+)?\s*\(\s*\S+\s*\)\s*\{)
请参阅RegEX DEMO
捕获组1将包含function foo ( xyz ) {
和捕获组2将包含foo
编辑:更新匿名function