PHP或JS正则表达式解析javascript函数

PHP或JS正则表达式解析javascript函数,javascript,php,jquery,Javascript,Php,Jquery,这与我的上一个问题相似,但我取得了一些进展。我有一个脚本,可以收集页面上的所有javascript并将其发布到php页面。我想在某个时候开始解析函数声明和使用的数据,但在尝试时,我遇到了大量错误。以下是我必须开始的内容: <script type="text/javascript"> $( document ).ready(function() { var file, S =0; var scripts = document.getElementsByTagName('script'

这与我的上一个问题相似,但我取得了一些进展。我有一个脚本,可以收集页面上的所有javascript并将其发布到php页面。我想在某个时候开始解析函数声明和使用的数据,但在尝试时,我遇到了大量错误。以下是我必须开始的内容:

<script type="text/javascript">
$( document ).ready(function() {
var file, S =0;
var scripts = document.getElementsByTagName('script');
function saveJS(JS, FILE){
  $.ajax({
    type: "POST",
    url: "/concat.php",
    data: {
      scriptText: JS,
      file: FILE
    },
    success: function(response) { }
  });
}   
function getJS(FILE){
    var response;
    $.get( FILE, function( data ) {
        saveJS(data, FILE)
    });

}

function postLoop () {          
   setTimeout(function () {   
      if (S < scripts.length) {          
        if (scripts[S].src) {
            getJS(scripts[S].src)
        }else{
            saveJS(scripts[S].innerHTML, "inline");
        }       
      S++;            
      postLoop();            
      }      
   }, 4000)
}
postLoop();
});  
</script>

<?php
$file = 'scripts.js';
$JS = $_REQUEST["scriptText"];
$contents = "

// Source File: " . $_REQUEST["file"] . "   //

" . $JS ."

// End File: " . $_REQUEST["file"] . "   //

";
preg_replace("#([\n\r]{1,2})#", "\r\n", $contents);
file_put_contents($file, $contents, FILE_APPEND | LOCK_EX);
?>
我尝试过使用以下方法:

preg_match_all(function.*\(.*\).*\{(.|\n)*?\n\}, $contents,
    $out, PREG_PATTERN_ORDER);
print_r($out);

preg_match_all('function.*\(.*\).*\{(.|\n)*?\n\}', $contents,
    $out, PREG_PATTERN_ORDER);
print_r($out);

$matches = array();
preg_match(`function.*\(.*\).*\{(.|\n)*?\n\}`, $contents, $matches);
print_r($matches);

$split = preg_split("function.*\(.*\).*\{(.|\n)*?\n\}", $contents);
print_r($split);

所有这些都不会返回任何结果,所以我在Javascript中尝试了类似的东西,结果都是空的。我的最后一个文件大约是2.5Mb,所以我想PHP会更好,有什么建议吗?

在处理它太长时间后,我得到了一些东西开始工作。它匹配了一些我希望不会匹配的东西,但最后我认为我可以解决它,因为它最终会得到空结果

这里是PHP

$html = file_get_contents('https://raw.githubusercontent.com/devongovett/regexgen/master/src/regex.js'); 
$regex = "/((function\s.*\(.*\)\s)?({(?:[^\{\}]++|(?R))*\}))/";
preg_match_all($regex, $html, $tmps, PREG_PATTERN_ORDER);
// here you could dump $tmps to see what it matches
echo "<pre>";

foreach($tmps[0] as $line){
$regex2 = "/function\s(.*)\(.*\)/";
preg_match_all($regex2, $line, $tmps2);

var_dump($tmps2[1]);
}
echo "</pre>";

当然,你可以用它做更多的事情,但这将给我的项目一个良好的开端。

在做了太长时间之后,我有了一些东西要开始工作。它匹配了一些我希望不会匹配的东西,但最后我认为我可以解决它,因为它最终会得到空结果

这里是PHP

$html = file_get_contents('https://raw.githubusercontent.com/devongovett/regexgen/master/src/regex.js'); 
$regex = "/((function\s.*\(.*\)\s)?({(?:[^\{\}]++|(?R))*\}))/";
preg_match_all($regex, $html, $tmps, PREG_PATTERN_ORDER);
// here you could dump $tmps to see what it matches
echo "<pre>";

foreach($tmps[0] as $line){
$regex2 = "/function\s(.*)\(.*\)/";
preg_match_all($regex2, $line, $tmps2);

var_dump($tmps2[1]);
}
echo "</pre>";

当然,您可以用它做更多的事情,但这将为我的项目提供一个良好的开端。

用正则表达式解析JavaScript?祝你好运,因为JS不是a,从数学上讲,这是不可能的。我可以发誓这是不可能的。怎么样:
function(){return}”;}
函数(){return“\”;}
函数(a=“)”{}
…谢谢大家,正则表达式
函数。*\(.*\).\{(.\124;\ n)*?\n\}
在Sublime和Editplus中工作得很好,我不认为这在PHP中是不可能的,因为Minifier和Uglifier基本上就是这么做的,对吧?在我看来,正确解析代码的最佳机会是运行一个完全定制的JS解释器,然后返回一个创建的所有函数和变量的列表bly并不太可行。无论如何,我记得,在PHP中,您需要
preg_which(“/function.*…您的模式…/”,…)
重要的是在PHP模式的开头和结尾放上起始字符和结束字符。用正则表达式解析JavaScript?祝你好运,因为JS不是一个函数,而且在数学上不可能这样做。我可以发誓这是不可能的。那么:
function(){return}
function(){return\'
函数(a=“)”{
…谢谢大家,regex
函数。*\(.*).*.\{(.\124;\ n)*?\n\
在Sublime和Editplus中工作得很好,我不认为这在PHP中是不可能的,因为从本质上讲,迷你们和丑八怪就是这么做的,对吧,正确解析代码的最佳机会是运行一个完全定制的JS解释器,然后返回创建的所有函数和变量的列表。当然,这可能不太可行。无论如何,我记得,在PHP中,您需要
preg_which(“/function.*…您的模式…/”,…)重要的是在PHP模式的开始和结束处放置起始字符和结束字符。
array(0) {
}
array(0) {
}
array(0) {
}
array(1) {
  [0]=>
  string(7) "toRegex"
}
array(1) {
  [0]=>
  string(4) "star"
}
array(1) {
  [0]=>
  string(5) "union"
}
array(1) {
  [0]=>
  string(21) "removeCommonSubstring"
}
array(1) {
  [0]=>
  string(15) "commonSubstring"
}
array(1) {
  [0]=>
  string(6) "concat"
}