这个正则表达式
/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();
但我正在寻找一种不那么棘手的方法。
最佳答案
您可以像这样使用捕获组来捕获函数签名和函数名称。
正则表达式: 函数\s+([^(]+)\s*\(\s*[^)]+\s*\)\s*{
解释:
function\s+
匹配标记函数开始的关键字function
。([^(]+)
匹配并捕获第一组中的函数名称。可以使用\1
或$1< 进行反向引用
.\s*\(\s*[^)]+\s*\)\s*{
匹配 rest 直到左花括号{
满足了。
关于javascript - 在匹配整个函数时捕获函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36444328/