Javascript 正则表达式从js文件中删除所有函数[Textmate首选]
我正在处理一个很大而且非常混乱的javascript文件,我想删除文件中的所有函数,最终创建一个只包含数据的版本 代码如下所示:Javascript 正则表达式从js文件中删除所有函数[Textmate首选],javascript,regex,textmate,Javascript,Regex,Textmate,我正在处理一个很大而且非常混乱的javascript文件,我想删除文件中的所有函数,最终创建一个只包含数据的版本 代码如下所示: var foo : bar = "hi"; function foobar (){ //blah blah } var fobar:bar; var barfo:bar; function imSoUgly(){ //Blah blah blah blah mr freeman } 我要构建的正则表达式将查找所有函数{.}并删除它们,生成以下结果: var
var foo : bar = "hi";
function foobar (){
//blah blah
}
var fobar:bar;
var barfo:bar;
function imSoUgly(){
//Blah blah blah blah mr freeman
}
我要构建的正则表达式将查找所有函数{.}并删除它们,生成以下结果:
var foo : bar = "hi";
var fobar:bar;
var barfo:bar;
我不太确定从哪里开始。理想情况下,我希望使用Textmate的正则表达式来实现这一点,但我很简单。我认为仅使用正则表达式是不可能的,因为不可能匹配可以任意深度嵌套的开始和结束大括号(代码块) 要可靠地执行此操作,您需要递归地查看所有内部代码块以定位函数的结尾。或者类似的东西(计算大括号的数量,…。--Deleted-Carko是对的,regexp是解决这个问题的一种非常简单的方法。
你需要一个合适的答案。你不能。也就是说你可以用这样的东西
function\s+\w+\s*\([^)]*\)\s*{[^}]*}
但是如果函数中有任何
{
或}
,并且您对此无能为力,那么它将失败。在我看来,Regex不足以完成如此复杂的任务。我能用regex做的最好的事情是:
[\r\n]function [\w ]*\(\)\{[\w\W]*?}
这将删除示例中的所有函数,但如果您有类似的功能,它将不起作用:
function foobar (){
if(condition){
// do something
} // this end brace would be mis-interpreted as the end of the function
// bla, bla, bla
}
你仍然会:
// bla, bla, bla
}
悲观主义者的答案是可行的,但前提是所有函数在结束行之前没有空格,这不太可能是真的
归根结底,您确实需要一个真正的JavaScript解析器。谷歌快速搜索发现:
使用“正则”表达式无法实现这一点,但有些语言提供了模式匹配结构,允许您匹配(除其他外)平衡文本
例如,Perl:
/function\s*\(\)\s*(\{([^{}]++|(?1))*\}/
它是否适合这项工作(提示:它可能不是)完全是另一个问题。非常粗糙的尝试:
function\s*+\(.*\)\s*{.+}
,多行,红宝石风格,不区分大小写。虽然我不认为正则表达式适用于此(见下面的评论),但这是一个了解正则表达式的好网站:考虑:var s=“function foo(){”var x=42;s=“}”
@Bart K.;-)但是,我要求您提供这样一个字符串的实际示例。如果您可以指导lynch mob,则会得到额外的好处。最简单的解决方案是只使用正则表达式,但检查它的每一次出现,而不是使用盲目的“全部替换”“。应该足够好,并且可以节省大量时间。您仍然需要担心字符串中的大括号。它也会在以下方面失败:函数XYZ(parm1,(parm2*10)){…}