gpt4 book ai didi

javascript - 正则表达式按名称查找函数,其声明可以采用任何格式

转载 作者:行者123 更新时间:2023-11-27 22:36:43 25 4
gpt4 key购买 nike

我有一个如下所示的 JavaScript 文件(例如仅发布了几行),在 Gedit(3.10.2 及更高版本)/Geany(1.26 及更高版本)编辑器中打开:

doFilter : function(){
var filters = $$('#'+this.containerId+' .filter input', '#'+this.containerId+' .filter select');
var elements = [];
for(var i in filters){
if(filters[i].value && filters[i].value.length) elements.push(filters[i]);
}
if (!this.doFilterCallback || (this.doFilterCallback && this.doFilterCallback())) {
this.reload(this.addVarToUrl(this.filterVar, encode_base64(Form.serializeElements(elements))));
}
},
resetFilter = function(){
this.reload(this.addVarToUrl(this.filterVar, ''));
},
checkCheckboxes : function(element){
elements = Element.select($(this.containerId), 'input[name="'+element.name+'"]');
for(var i=0; i<elements.length;i++){
this.setCheckboxChecked(elements[i], element.checked);
}
},
function openGridRow(grid, event){
var element = Event.findElement(event, 'tr');
if(['a', 'input', 'select', 'option'].indexOf(Event.element(event).tagName.toLowerCase())!=-1) {
return;
}

if(element.title){
setLocation(element.title);
}
}

在这个文件中可以看到,javascript函数以各种格式声明,现在我想通过函数名称找到一个函数,但我不知道它的声明将以哪种格式。

如何通过正则表达式做到这一点?

我已经尝试过 function.*{|\w*\= function.*{|jquery.*{ 但这给了我所有函数,我想通过名称查找特定函数doFilter 但我不知道它会以哪种格式声明。

最佳答案

这些类型的正则表达式需要的一件事是按顺序匹配嵌套大括号 - 称为递归。

但我不会编写递归匹配,因为我不知道您是否要在 JS 应用程序中实现此功能,或者仅使用编辑器搜索功能。

(?:doFilter\s*[:=]\s*function|function\s*doFilter)\([^)]*\)\s*{((?:[^{}]+|{[^}]+})*)}

Live demo

上面的正则表达式不需要完整的解释,它很容易阅读,但我会解释可能不明确的部分:

{               # Start of function body
( # Start of capturing group (1)
(?: # Start of non-capturing group (a)
[^{}]+ # Match characters except { and }
| # OR
{[^}]+} # Match a block of braces {...}
)* # Zero or more times (greedy) - End of non-capturing group (a)
) # End of capturing group (1)
} # End of function body

注意

此正则表达式应该用于在注释行中没有 {} 的 JavaScript 代码(特定函数体),例如 //{ comment (未配对)或用引号引起来的字符串 string == '{'

如果您需要它们,您可能需要查看此 answer of me并获取所需的零件。

关于javascript - 正则表达式按名称查找函数,其声明可以采用任何格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39050885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com