javascript - 在匹配整个函数时捕获函数名称

标签 javascript regex node.js

这个正则表达式

/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 直到左花括号 {满足了。

Regex101 Demo

关于javascript - 在匹配整个函数时捕获函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36444328/

相关文章:

regex - 使用 bash 脚本逐行读取文件

javascript - 饼图系列颜色在 NodeRed 上为黑色

javascript - 如何DRY映射函数?

Javascript 将名称 array() 加一

python - 从 Pandas 数据框的每一行中的单词中删除多个字符组合

javascript - 如何检查 selenium 服务器的当前状态(使用 Node.js 的 API?还有别的吗?)

javascript - NodeJS 中的流

javascript - ASP.NET Razor 页面中出现未终止的字符串常量错误

javascript - 尝试从另一个对象访问对象属性总是返回该属性的初始值

c - 在 C 中的宽字符字符串上使用 regex(3) 函数的可移植方法