所以,我有这个RegEx捕获我需要的特定字符串(感谢Shawn Mehan):
>?url:\'\/watch\/(video[\w-\/]*)
效果很好,但现在我需要修改我的标准。我需要捕获EACH实例之后的第一个URL:videos:[{title:
。对下面的所有实例进行了粗体,并将我想要捕获的第一个网址加粗为例。
我该如何处理?我有一个VBScript将每个URL转储到一个文本文件,所以我只需要帮助从下面的blob中选择正确的URL。想一想,“如果找到这个字符串,就这样做,循环”。将regex global设置为false应该只捕获每一轮的第一个实例,对吧?一个基本的例子会有帮助。
我相信我拥有所需的所有部分,但我不太确定如何将它们组合在一起。我期待下面的代码循环并找到每个“视频:[{title:”的实例的索引,然后正则表达式根据模式获取第一个URL(regexp global设置为false),然后写找到我的文本文件的URL,循环直到找到所有文件。不工作......
(html_dump的大部分:http://pastebin.com/6i5gmeTB)
Set objWshShell = Wscript.CreateObject("Wscript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set objRegExp = new RegExp
objRegExp.Global = False
objRegExp.Pattern = ">?url:\'\/watch\/(video[\w-\/]*)"
filename = fso.GetParentFolderName(WScript.ScriptFullName) & "\html_dump.txt" 'Text file contains html
set urldump = fso.opentextfile(filename,1,true)
do until urldump.AtEndOfStream
strLine = urldump.ReadLine()
strSearch = InStrRev(strLine, "videos:[{title:") 'Attempting to find the position of "videos:[{title:" to grab the first URL after.
If strSearch >0 then
Set myMatches = objRegExp.Execute(strLine) 'This matches the URL pattern.
For Each myMatch in myMatches
strCleanURL = myMatch.value
next
'===Writes clean urls to txt file...or, it would it if worked===
filename1 = fso.GetParentFolderName(WScript.ScriptFullName) & "\URLsClean.txt" 'Creates and writes to this file
set WriteURL = fso.opentextfile(filename1,2,true)
WriteURL.WriteLine strCleanURL
WriteURL.Close
else
End if
loop
urldump.close
var streams = [{streamID:138,cards:[{cardId:59643,cardTypeId:48,clickCount:84221,happenOn:'2015-08-17T15:30:17.000-07:00',expiredOn:''标题:'最新新闻头条',subHeader:'以下是来自世界各地的一些最新头条。',链接:'/ watch / playlist / 544 / Latest-News-Headlines',赚取:3,播放列表修订ID:3427 ,图像:'http%3A%2F%2Fpthumbnails.5min.com%2F10380591%2F519029502_3_o.jpg',imageParamPrefix:'?',size:13,durationMin:15,durationTime:'14:34',pos:0,trkId :'2gs55j6u0nz8',真实,视频:[{title:'世界上第一个天空泳池即将出现在伦敦南部',缩略图:'http%3A%2F%2Fpthumbnails.5min.com %2F10380509%2F519025436_c_140_105.jpg“ durationTime:‘0:39’,网址:” / 手表/视频/ 716424 /世界先天空池即将出现 - 在南伦敦',评级:'4.2857'},{标题:'寻宝者在西班牙硬币中找到450万美元',缩略图:'http%3A%2F%2Fpthumbnails.5min.com%2F10380462%2F519023092_3.jpg',durationTime:' 0:54' ,网址:'/手表/视频/715927/treasure-hunters-find-4-5-million-in-spanish-coins',rating:'4.25'},{title:'前总统吉米卡特称巨蟹座已经扩散到大脑',缩略图:'http% 3A%2F%2Fpthumbnails.5min.com%2F10380499%2F519024920_c_140_105.jpg 'durationTime: '1:59',网址:'/手表/视频/ 716363 /前总统 - 吉米 - 卡特说,癌症具有扩频-to-brain',评级:'2.8889'},{标题:'Josh Duggar在AshleyMadison.Com上有多个账户',缩略图:'http%3A%2F%2Fpthumbnails.5min.com%2F10380505%2F519025222_c_140_105.jpg', durationTime: '1:30',
答案 0 :(得分:0)
假设您的输入来自文件且格式正确,您可以在PowerShell中执行以下操作:
$jsonfile = 'C:\path\to\input.txt'
$json = Get-Content $jsonfile -Raw | ConvertFrom-Json
$json.streams.cards | ForEach-Object { $_.videos[0].url }
以上假设streams
是JSON数据中最顶层的密钥。
请注意,该代码至少需要PowerShell v3。