使用正则表达式以发现含有特定的方法或可变功能(Using Regex to find functio

2019-10-17 15:48发布

这是我的计算器上的第一篇文章,所以请温柔的我...

我仍然在学习正则表达式 - 主要是因为我最终发现,他们可以多么有用,这是部分通过使用文本崇高2,因此,这是Perl的正则表达式(我相信)

我做这和其他网站上进行搜索,但我现在真的卡住。 也许我试图做一些事情,不能做

我想找到一个正则表达式(模式),可以让我找到包含给定的变量或方法调用的函数或方法或过程等。

我已经尝试了许多表情,他们似乎得到的方法的一部分,但不是全部的路。 特别是在Javascript中搜索时,我拿起多个函数声明,而不是呼叫/变量,我找了一个最接近的。

例如:我在寻找一个调用保存数据的方法()的函数我已经了解到,从(S?)这个优秀的网站,我可以用它来切换。 包括换行符

function.*(?=(?s).*?savedata\(\))

然而,这将查找单词功能的第一个实例,然后对所有的文本和包括SAVEDATA()

如果有多个程序,然后将开始下一个功能,并再次重复,直到它到达保存数据()

function(?s).*?savedata\(\) does something similar

我曾尝试要求它使用类似忽略第二功能(我相信):

function(?s).*?(?:(?!function).*?)*savedata\(\)

但是,这并不工作。

我做了一些调查与过去向前看和向后看,但无论我做错了(极有可能),或者他们是不正确的事情。

综上所述(我猜),我怎么往回走,从给定字到不同的字最近的发生。

在我使用这个通过一些JavaScript文件进行搜索,试图了解该结构的那一刻/调用等,但最终我希望能在C#中的文件和一些vb.net文件使用

提前谢谢了

感谢您的迅速反应,遗憾的没有添加的代码示例块 - 这是我现在做的(修改,但仍足以说明问题)

如果我有一个像下面的JavaScript的简单块:

    function a_CellClickHandler(gridName, cellId, button){
        var stuffhappenshere;
        var and here;
        if(something or other){
            if (anothertest) {

                event.returnValue=false;
                event.cancelBubble=true;
                return true; 
            }
            else{
                event.returnValue=false;
                event.cancelBubble=true;
                return true;
            }
        } 
    }

    function a_DblClickHandler(gridName, cellId){
        var userRow = rowfromsomewhere;
        var userCell = cellfromsomewhereelse;
        //this will need to save the local data before allowing any inserts to ensure that they are inserted in the correct place
        if (checkforarangeofthings){
            if (differenttest) {
                InsSeqNum = insertnumbervalue;
                InsRowID = arow.getValue()
                blnWasInsert = true;
                blnWasDoubleClick = true;
                SaveData();      
            }
        }
    }

运行针对该正则表达式 - 包括被认定为应该是工作崇高文本2将通过选择一切从第一函数来保存数据的第二个()

我希望能够得到公正的dblClickHandler在这种情况下 - 不能同时使用。

希望此代码段会增加一些透明度和抱歉,我希望一个标准的代码文件就足够了最初没有发布。

Answer 1:

此正则表达式将查找包含保存数据的方法每个JavaScript函数:

(?<=[\r\n])([\t ]*+)function[^\r\n]*+[\r\n]++(?:(?!\1\})[^\r\n]*+[\r\n]++)*?[^\r\n]*?\bSaveData\(\)

它将匹配在函数的所有排队,并且包括,含有保存数据的方法的第一行。

警告:

  • 源代码必须具有良好的成形的缩进为此工作,作为正则表达式匹配使用压痕检测的功能的端。
  • 如果它开始在文件的第一行不匹配的功能。

说明:

(?<=[\r\n])                      Start at the beginning of a line
([\t ]*+)                        Capture the indentation of that line in Capture Group 1
function[^\r\n]*+[\r\n]++        Match the rest of the declaration line of the function
(?:(?!\1\})[^\r\n]*+[\r\n]++)*?  Match more lines (lazily) which are not the last line of the function, until: 
[^\r\n]*?\bSaveData\(\)          Match the first line of the function containing the SaveData method call

注: *+++有着很强的占有欲量词,仅用于加快执行速度。

编辑:修正了正则表达式的两个小问题。
编辑:修正了正则表达式的另一个小问题。



文章来源: Using Regex to find function containing a specific method or variable