从JS文件中的代码语句中提取URLS


1

所有, 我想提取文件夹中所有js文件中的代码语句中提到的所有URL。 对于例如如果一个js文件包含这段代码:

var myURL="http://yahoo.com/signup"  
//var myURL="http://yahoo.com/sign" --commented out 

然后当我的脚本运行时,输出应该只是“ http://yahoo.com/signup “。目前我正在使用grep来提取URL。输出包含输出中的两个语句。我不想在输出中使用注释的URL。

目前我正在使用基本的grep语句

 cat somefile.js | grep "http[s]\?://"  

所有URL都将是http / https,并将在js文件中的语句中声明。

我想微调这个grep语句只输出URLS(不包括注释的URL)而不是完整的语句。我怎样才能微调这个grep语句?

Answers:


0

你的文件有多大/你有多少?

我用于此类事物的一个非常简单的解决方案是excel。您可以将文件(只要只有一对)复制/粘贴到Excel中,然后对列进行排序。你应该在一个地方找到你所有的变种。将它们复制/粘贴到新工作表中,然后将列拆分为“”。这应该会为您提供一列网址。

当然,这对许多文件来说都不实用 - 脚本在那里会更好用。

我发现这对于手工解析json特别有用。这是我通常如何使用它的一个例子。这是来自json数组的snippit:

{'english' => 'the animals, 'spanish' => 'los animales', 'image_url' => 'http://www.resourcesgraphics.com/images/Animals-Set-icons.jpg},
{'english' => 'the bear, 'spanish' => ' el oso  , 'image_url' => 'http://images.nationalgeographic.com/wpf/media-live/photos/000/005/cache/grizzly-bear_566_600x450.jpg},
{'english' => 'the beaver, 'spanish' => 'el castor, 'image_url' => 'http://images.nationalgeographic.com/wpf/media-live/photos/000/004/cache/beaver_457_600x450.jpg},
etc... (I have ~2000 entries in this file.)

要获取所有网址,我只需将整个文件复制/粘贴到Excel中,然后使用数据>文本到列>分隔。如果您拆分报价,它会将URL拉出到自己的列中。

这也是另一种方式。 (我经常这样做。)如果你想制作上面的表,你可以反过来使用这个过程。要快速填充列,我只需要创建第一列:

{'*english*' => '*the animals*, '*spanish*' => '*los animales*', '*image_url*' => '*http://www.resourcesgraphics.com/images/Animals-Set-icons.jpg*},

(* =列分割)

所以,现在我们有column1 =“{'”,column2 =“english”,column3 =“'=>'”等...第1,3,5列等填充物,数据在中间。然后我会填写所有数据,然后复制到填充程序中。填写填充数据的快速方法是双击顶部填充单元的右下方手柄。这应该将列中的数据复制到数据的末尾。

制作完电子表格后,请保存。您可以稍后再使用它。当您需要数据时,只需复制所有数据,然后粘贴到文本编辑器中。

通常会从列中留下一堆讨厌的标签,但可以通过简单的查找/替换来删除这些标签。

希望有所帮助 - 如果您想了解更多信息,请告诉我们! - L.


你能详细说说吗?也许是一个小例子/截图。这是一个有趣的方法!
iglvzx

一定!我已经更新了答案 - 让我知道它是否清楚/有用。
Sauce McBoss

@lrog:我必须在一个文件夹中循环遍历10-15个JS文件,每个文件最多有400-500行。
smokinguns

@smokinguns呀,对于类似的东西,我认为使用excel可能是最快的。如果你喜欢> 20个文件,我会说拼凑一个脚本。对于我的回答,我假设所有的网址都在这些文件中定义并导入。这些复杂的源代码文件?请描述您的数据。
Sauce McBoss

@smokinguns实际上,如果你只是难以从评论的网址中整理出真实的网址,你难道不能把它们放在Excel中并对它们进行排序吗?然后你可以拆分列并获取数据。
Sauce McBoss

0

这是一个PERL解决方案:

perl -ne '/^[^\/\/]*"(http.+?)"/ && do{print "$1\n"}' somefile.js 

说明:

  • perl -ne :逐行循环输入文件(-n)并运行命令行(-e)上给出的脚本

  • /^[^\/\/]*"(http.+?)"/ :寻找没有的行 // 之前 首先 http 并保存后面的字符 http 直到第一个 "。括号中的模式 () 将被保存为 $1

  • && do{print "$1\n"} :如果线条与正则表达式匹配,则打印捕获的图案(URL)。

注意事项:

这是一个非常简单的解决方案,假设您每行只有一个URL 所有 引用了网址。如果您需要更复杂的版本,请告诉我。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.