如何在功能中找到关键词?

时间:2011-11-02 21:45:25

标签: php regex

先谢谢你的帮助!

我有一些jscripts,如:

var id="001";

var name="Jerry";
...

function f1() {
  ...
  var qid="q1";
  ...
}

...
var qid="aaabbb";
...

function f2(){
  ...
  var myid="q1";
  ...
}

...

我想使用正则表达式来获取包含关键字“q1”的函数的名称。有一个简单的方法吗?

3 个答案:

答案 0 :(得分:2)

可以在JavaScript中的其他函数中定义函数,因此使用正则表达式来尝试解决此问题是不可能的。对不起: - (

此外,问题尚未明确。在这种情况下你想要什么功能名称?

function outerFunction(x, y) {
    var innerFunction = function(z) {
        return {
            firstProperty: function() {
                return "q1";
            }
        };
    };
}

请参阅?声明函数的三种不同方式。你会如何创建一个足够通用的解决方案,以便知道这种情况的“正确”(最相关)函数名称?

答案 1 :(得分:2)

尝试以下方法:

/^function ([^(]*?)\((?=(?:[^\n]|\n[^}])*("q1")).*?^}/ms

请注意,当它位于函数之外时,它与“q1”不匹配,或者内部没有“q1”的函数名称。对于每个匹配,第一组将是功能名称,第二组将是“q1”。

查看实际操作:http://rubular.com/r/xQwro38DUO

以下是解释:

$regex = <<<END
/
    ^function[ ]         # start looking when a line starts with function
    ([^(]*?)\(           # capture the function name into group 1
    (?=                  # start a lookahead
      (?:[^\n]|\n[^}])*  # consume characters until a line starts with '}'
      ("q1")             # or until we find "q1" (and place it in group 2)
    )                    # end lookahead
    .*?^}                # consume until end of function (optional)
/msx                     # m and s flags for consuming multiple line handling
END;

答案 2 :(得分:1)

以下是似乎对我有用的正则表达式:

(function(.*)\(.*|\n*"q1")

以下是我测试它的方式:

http://rubular.com/r/APPNRR54oW