与javascript匹配
我目前正在为XBMC开发一个包含ajax的Web界面。 由于out-ajax的局限性,我不得不使用本地资源,而不是我的ajax类,它通常会生成输出。 我有一根绳子。 *表示此文本可以更改 这是字符串: 文件名:smb://SERVER/Music/3 Doors Down/2000更好 Life/07 Better Life.mp3播放状态:播放歌曲编号:6类型:音频 标题:更好的生活轨道:7艺术家:3门下来专辑:更好的生活 类型:备选年份:2000 URL:smb://xbox:xbox@服务器/音乐/3门 Down/2000更好的生活/07更好的生活。mp3歌词:比特率:193 采样器:44 Thumb:DefaultAlbumCover.png时间:02:05持续时间:03:07 百分比:66文件大小:4509417更改:False 我想知道我如何能匹配标题、编剧、时间和持续时间。 我尝试使用regex,但没有成功,因为我没有那么多JS知识 谢谢, 布兰杰 编辑:与javascript匹配,javascript,ajax,regex,xbmc,Javascript,Ajax,Regex,Xbmc,我目前正在为XBMC开发一个包含ajax的Web界面。 由于out-ajax的局限性,我不得不使用本地资源,而不是我的ajax类,它通常会生成输出。 我有一根绳子。 *表示此文本可以更改 这是字符串: 文件名:smb://SERVER/Music/3 Doors Down/2000更好 Life/07 Better Life.mp3播放状态:播放歌曲编号:6类型:音频 标题:更好的生活轨道:7艺术家:3门下来专辑:更好的生活 类型:备选年份:2000 URL:smb://xbox:xbox@服务
“你确定那是字符串吗?所有的字符串都是这样运行的,没有换行符吗?编辑:我编辑了这个问题来修正格式。-Ariel 2小时前” 没有, 来自 播放视频时看起来像这样 HTML代码:
<html>
<li>Filename:smb://SERVER/Movies/Drive Angry/Drive Angry (2011) DVDRip XviD-MAXSPEED.avi
<li>PlayStatus:Playing
<li>VideoNo:0
<li>Type:Video
<li>Thumb:DefaultVideoCover.png
<li>Time:00:00:28
<li>Duration:01:44:31
<li>Percentage:0
<li>File size:1666804442
<li>Changed:False</html>
文件名:smb://SERVER/Movies/Drive 愤怒/驾驶愤怒(2011)DVDRip XviD-MAXSPEED.avi
播放状态:播放
录影带编号:0
类型:视频
Thumb:DefaultVideoCover.png
时间:00:00:28
持续时间:01:44:31
百分比:0
文件大小:1666804442
更改:False
当播放音乐时,它有点不同
<html>
<li>Filename:smb://SERVER/Music/3 Doors Down/2000 The Better Life/01 Kryptonite.mp3
<li>PlayStatus:Playing
<li>SongNo:-1
<li>Type:Audio
<li>Title:Kryptonite
<li>Track:1
<li>Artist:3 Doors Down
<li>Album:The Better Life
<li>Genre:Alternative
<li>Year:2000
<li>URL:smb://xbox:xbox@SERVER/Music/3 Doors Down/2000 The Better Life/01 Kryptonite.mp3
<li>Lyrics:
<li>Bitrate:192
<li>Samplerate:44
<li>Thumb:DefaultAlbumCover.png
<li>Time:00:05
<li>Duration:03:54
<li>Percentage:2
<li>File size:5618471
<li>Changed:False</html>
文件名:smb://SERVER/Music/3 Doors Down/2000更好的生活/01 Kryptonite.mp3
播放状态:播放
宋号:-1
类型:音频
标题:氪石
轨道:1
艺术家:三扇门后
专辑:更好的生活
类型:另类
年份:2000年
网址:smb://xbox:xbox@服务器/音乐/3门关闭/2000更好的生活/01 Kryptonite.mp3
歌词:
比特率:192
采样器:44
Thumb:DefaultAlbumCover.png
时间:00:05
持续时间:03:54
百分比:2
档案大小:5618471
更改:False
假设以下字符串:
var str = "Filename:smb://SERVER/Music/3 Doors Down/2000 The Better Life/07 Better Life.mp3 PlayStatus:Playing SongNo:6 Type:Audio Title:Better Life Track:7 Artist:3 Doors Down Album:The Better Life Genre:Alternative Year:2000 URL:smb://xbox:xbox@SERVER/Music/3 Doors Down/2000 The Better Life/07 Better Life.mp3 Lyrics: Bitrate:193 Samplerate:44 Thumb:DefaultAlbumCover.png Time:02:05 Duration:03:07 Percentage:66 File size:4509417 Changed:False";
将属性提取到字典/地图中:
var dict = (" " + str).split(/ (\w+):/).reduce(function(acc, el, i, orig) {
if (i % 2)
acc[el] = orig[i + 1];
return acc;
}, {});
没有高阶函数,情况也是如此:
var i, dict = {}, pair = (" " + str).split(/ (\w+):/);
for (i = 1; i < pair.length; i += 2)
dict[pair[i]] = pair[i + 1];
输出:
Better Life
3 Doors Down
02:05
03:07
假设以下字符串:
var str = "Filename:smb://SERVER/Music/3 Doors Down/2000 The Better Life/07 Better Life.mp3 PlayStatus:Playing SongNo:6 Type:Audio Title:Better Life Track:7 Artist:3 Doors Down Album:The Better Life Genre:Alternative Year:2000 URL:smb://xbox:xbox@SERVER/Music/3 Doors Down/2000 The Better Life/07 Better Life.mp3 Lyrics: Bitrate:193 Samplerate:44 Thumb:DefaultAlbumCover.png Time:02:05 Duration:03:07 Percentage:66 File size:4509417 Changed:False";
将属性提取到字典/地图中:
var dict = (" " + str).split(/ (\w+):/).reduce(function(acc, el, i, orig) {
if (i % 2)
acc[el] = orig[i + 1];
return acc;
}, {});
没有高阶函数,情况也是如此:
var i, dict = {}, pair = (" " + str).split(/ (\w+):/);
for (i = 1; i < pair.length; i += 2)
dict[pair[i]] = pair[i + 1];
输出:
Better Life
3 Doors Down
02:05
03:07
下面是我如何使用正则表达式实现的:
var data = "Filename:smb://SERVER/Music/3 Doors Down/2000 The Better Life/07 Better Life.mp3 PlayStatus:Playing SongNo:6 Type:Audio Title:Better Life Track:7 Artist:3 Doors Down Album:The Better Life Genre:Alternative Year:2000 URL:smb://xbox:xbox@SERVER/Music/3 Doors Down/2000 The Better Life/07 Better Life.mp3 Lyrics: Bitrate:193 Samplerate:44 Thumb:DefaultAlbumCover.png Time:02:05 Duration:03:07 Percentage:66 File size:4509417 Changed:False";
function matchField(field, str) {
// regexp: space, field, colon, (fewest number of chars), space, fewest number of non-whitespace chars, colon
var re = new RegExp("\\s" + field + ":(.+?)\\s\\S+?:");
try {
return(str.match(re)[1]);
} catch(e) {}
return("");
}
var songTitle = matchField("Title", data);
var artist = matchField("Artist", data);
var duration = matchField("Duration", data);
你可以在这里看到它的作用:
结果:
Title: Better Life
Artist: 3 Doors Down
Duration: 03:07
我认为实际上可以用一个正则表达式来完成这一切,但这会迫使不同字段的顺序每次都完全相同。下面是我用正则表达式实现的方法:
var data = "Filename:smb://SERVER/Music/3 Doors Down/2000 The Better Life/07 Better Life.mp3 PlayStatus:Playing SongNo:6 Type:Audio Title:Better Life Track:7 Artist:3 Doors Down Album:The Better Life Genre:Alternative Year:2000 URL:smb://xbox:xbox@SERVER/Music/3 Doors Down/2000 The Better Life/07 Better Life.mp3 Lyrics: Bitrate:193 Samplerate:44 Thumb:DefaultAlbumCover.png Time:02:05 Duration:03:07 Percentage:66 File size:4509417 Changed:False";
function matchField(field, str) {
// regexp: space, field, colon, (fewest number of chars), space, fewest number of non-whitespace chars, colon
var re = new RegExp("\\s" + field + ":(.+?)\\s\\S+?:");
try {
return(str.match(re)[1]);
} catch(e) {}
return("");
}
var songTitle = matchField("Title", data);
var artist = matchField("Artist", data);
var duration = matchField("Duration", data);
你可以在这里看到它的作用:
结果:
Title: Better Life
Artist: 3 Doors Down
Duration: 03:07
我认为实际上可以用一个正则表达式来完成这一切,但这会迫使不同字段的顺序每次都完全相同。有没有可能?请问?“由于ajax的限制,我被迫使用本地资源,而不是我的ajax类,它通常会生成输出。”-你能解释一下吗?@slandau,通常的意思是“由于开发人员的限制”;)你确定那是绳子吗?所有人都像那样跑在一起,没有换行符?编辑:我编辑了问题以修复格式。lol。我不知道阿贾克斯对布兰杰有什么限制。你可以在服务器上做任何事情,你也可以用AJAX做任何事情——只要打电话就行了!此外,正如Matt Ball所说,您应该以JSON格式返回信息,这样,您就可以轻松地分离属性并在前端访问它们—您是否有机会使用它们?请问?“由于ajax的限制,我被迫使用本地资源,而不是我的ajax类,它通常会生成输出。”-你能解释一下吗?@slandau,通常的意思是“由于开发人员的限制”;)你确定那是绳子吗?所有人都像那样跑在一起,没有换行符?编辑:我编辑了问题以修复格式。lol。我不知道阿贾克斯对布兰杰有什么限制。你可以在服务器上做任何事情,你也可以用AJAX做任何事情——只要打电话就行了!此外,正如Matt Ball所说,您应该以JSON格式返回信息,这样,您就可以轻松地分离属性并在前端访问它们