【问题标题】:How can I find javascript method names in a file?如何在文件中找到 javascript 方法名称?
【发布时间】:2010-10-04 13:35:43
【问题描述】:

谁能帮助我在 javascript 文件中使用正则表达式查找方法名称。

【问题讨论】:

  • 你能举个例子说明你正在尝试做什么吗?
  • 例如,如果我有一个名为 file1.js 的文件,其中包含类似 100 个方法的。我开发了一个工具,我需要在其中找到这 100 个方法。
  • 为了找到这个,我使用了基本信息。我使用文件流读取完整文件并存储在字符串数组中。之后我拆分数组并搜索字符串“函数”并使用索引并找到了名字的 .
  • 但这是一项繁琐的任务。所以我想使用正则表达式的
  • 使用适当的分词器 - 仅使用正则表达式是不够的。

标签: javascript regex c#-4.0


【解决方案1】:
(?!function\s+)([_$a-zA-Z][_$a-zA-Z0-9]*)(?=\s*\()

在尝试使用正则表达式解析 JavaScript 时可能会遇到很多问题。首先,我们有几件事在正常情况下会被词法分析器忽略。

白色空间 线路终结者 评论

现在空白的概念并不像空格字符那么简单。这是您的正则表达式中必须包含的字符的完整列表。

空白: '\u0009' '\u000c' '\u00a0' '\u180e' '\u2001' '\u2003' '\u2005' '\u2007' '\u2009' '\u202f' '\u3000' '\u000b' '\u0020' '\u1680' '\u2000' '\u2002' '\u2004' '\u2006' '\u2008' '\u200a' '\u205f' '\ufeff'

我们的正则表达式一开始就变得复杂起来。现在我们有了 LineTerminator 产品,它再一次不像你想象的那么简单。

线终结者: '\u000a' '\u000d' '\u2028' '\u2029'

我不会详细介绍,但这里有几个完全有效的函数定义示例。

function
a() {

}

function /*Why is this comment here!!!*/ a() {

}

所以我们得到了一些好消息和一些坏消息。好消息是我的简单正则表达式将涵盖大多数常见情况。只要文件是用理智的方式编写的,它就可以正常工作。坏消息是,如果您想涵盖所有极端情况,您将面临一个巨大的正则表达式。

注意

我只是想说,匹配有效函数标识符的正则表达式会特别可怕。

【讨论】:

  • 没有。 JavaScript 语法过于复杂,正则表达式无法可靠地解析它。
  • 不仅正则表达式不适合解析 Javascript 的任务,在一般情况下,定位源文件中所有函数的“名称”并不总是一个有意义的概念。因为 Javascript 函数是值,所以在一个模块中查找所有函数的名称就像在一个模块中查找所有数字的名称。
  • @bobince - 你会惊讶于你能有多接近。不过,我们永远不会接近 100%。根据项目要求,编写适当的标记器可能不值得。根据我的经验,它至少需要 350 行 (F# 使用解析器组合器。) 以及 1000-5000 行 C# (解析器生成器往往会生成巨大的代码文件。如果你手动编写,你可以逃脱 1000。)
猜你喜欢
  • 2011-08-06
  • 2011-09-20
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
相关资源
最近更新 更多