Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与javascript匹配_Javascript_Ajax_Regex_Xbmc - Fatal编程技术网

与javascript匹配

与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@服务

我目前正在为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知识

谢谢, 布兰杰

编辑:
“你确定那是字符串吗?所有的字符串都是这样运行的,没有换行符吗?编辑:我编辑了这个问题来修正格式。-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格式返回信息,这样,您就可以轻松地分离属性并在前端访问它们