这个正则表达式
/function\s*\(\s*\S*\s*\)\s*\{/
应匹配单个参数函数,如
function foo ( xyz ) {
(注意" \ S"将匹配任何非空白字符,我们可以假设原始代码在使用可接受的字符时是正确的,所以没关系)
我的问题是,如何匹配一行文字
" baz function foo(xyz){bar"
并抓住这两个:
"function foo ( xyz ) {"
和
"foo"
换句话说,我想以某种方式匹配函数签名的开头,以及捕获函数的名称。
我不知道该怎么做。
" easy"方法是做类似的事情:
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();
但我正在寻找一种不那么黑客的方式。
答案 0 :(得分:1)
您可以使用像这样的捕获组来捕获函数签名和函数名称。
正则表达式: function\s+
<强>解释强>
function
匹配标记功能开头的关键字([^(]+)
。
\1
匹配并捕获第一组中的函数名称。可以使用$1
或\s*\(\s*[^)]+\s*\)\s*{
进行反向引用。
{
匹配休息,直到满足开口大括号{{1}}。
<强> Regex101 Demo 强>
答案 1 :(得分:1)
您可以使用以下内容:
(function\s*(\S+)?\s*\(\s*\S+\s*\)\s*\{)
请参阅RegEX DEMO
捕获组1将包含function foo ( xyz ) {
,捕获组2将包含foo
编辑:更新了匿名函数
答案 2 :(得分:1)
试试这个
(function\s+([^\(\s]+).*?\)\s*\{)
<强> Regex Demo 强>
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
}
匿名函数
UPDATE
检查这个
(function(\s+([^\(\s]+))?.*?\)\s*\{)
<强> Regex Demo 强>
var myval = "function ( abc ) {";
var regex = /(function(\s+([^\(\s]+))?.*?\)\s*\{)/mg
while (matches = regex.exec(myval)) {
document.writeln(matches[1]) //function definition
if (matches[2])
document.writeln(matches[2]) //function name
}