Regex按名称查找函数,其声明可以是任何格式
Regex find function by name whose declaration can be in any format
我有一个像下面这样的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*{((?:[^{}]+|{[^}]+})*)}
现场演示
上面的正则表达式不需要一个完整的解释,它很容易阅读,但我将解释可能模棱两可的部分:
{ # 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
(unpaird)或引号字符串string == '{'
。
如果你需要它们,你可以看看我的答案,并抓住需要的部分
您可能可以做得更好,这还远远没有经过完全测试,但这似乎是有效的:
/(function)?''s*doFilter''s*(:|=)?''s*(function)?''s*''(/
regex 101 test
匹配以下格式:
doFilter : function(){
},
doFilter = function(){
},
function doFilter(grid, event){
}
相关文章:
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 如何使用javascript或html下载PDF格式的填写表单
- 货币代码为欧元-金额的格式不应包含小数
- Json数据包含日期和时间格式
- 直接在函数声明上使用function.prototype.bind
- Javascript日期格式类似于ISO,但本地
- 更改angularjs中的日期-时间格式
- 获取HTML属性中CSS声明的值
- 将日期时间从json转换为可读格式
- NodeJS日期格式不起作用
- 我能得到正确的格式吗
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 对API数据使用声明性绑定
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 将日期和时间转换为UTC格式的日期-Javascript
- Javascript格式UTC日期
- 元素的内容必须由格式正确的字符数据或标记组成
- 将以这种格式声明的函数放入single.js中,以便包含在其他文件中
- 对峙:ASP.NET mvc声明式、格式字符串式路由和node's命令式路由
- Regex按名称查找函数,其声明可以是任何格式