JavaScript:解析奇数字符串以获得必要的信息(RegEx)

JavaScript: Parse through odd string to get necessary information (RegEx)

本文关键字:信息 RegEx 数字 字符串 JavaScript      更新时间:2023-09-26

我试图解析一个格式奇怪的字符串,该字符串存储了我正在构建的音频播放器所需的一些数据。例如:

"a:14:{s:10:"dataformat";s:3:"mp3";s:8:"channels";i:2;s:11:"sample_rate";i:44100;s:7:"bitrate";i:192000;s:11:"channelmode";s:12:"joint stereo";s:12:"bitrate_mode";s:3:"cbr";s:8:"lossless";b:0;s:15:"encoder_options";s:6:"CBR192";s:17:"compression_ratio";d:0.1360544217687074952660708504481590352952480316162109375;s:10:"fileformat";s:3:"mp3";s:8:"filesize";i:7249920;s:9:"mime_type";s:10:"audio/mpeg";s:6:"length";i:302;s:16:"length_formatted";s:4:"5:02";}"

它超级难看。对于我接口的每首歌,都会包括上面提供的信息类型。基本上,我想要的只是"length_formated"的值,即"5:02"。我假设我需要使用正则表达式来实现这一点,但由于我没有任何经验,我不知道从哪里开始。

试试这个代码:

string = `"a:14:{s:10:"dataformat";s:3:"mp3";s:8:"channels";i:2;s:11:"sample_rate";i:44100;s:7:"bitrate";i:192000;s:11:"channelmode";s:12:"joint stereo";s:12:"bitrate_mode";s:3:"cbr";s:8:"lossless";b:0;s:15:"encoder_options";s:6:"CBR192";s:17:"compression_ratio";d:0.1360544217687074952660708504481590352952480316162109375;s:10:"fileformat";s:3:"mp3";s:8:"filesize";i:7249920;s:9:"mime_type";s:10:"audio/mpeg";s:6:"length";i:302;s:16:"length_formatted";s:4:"5:02";}"`
document.body.innerHTML = string.match(/length_formatted.*?('d+:'d+)/)[1]

解释正则表达式:

/length_formatted.*?('d+:'d+)/
length_formatted          // match the literal text
.*?                       // till the next ocurrence of
(                         // group in [1]
    'd+                       // at least one digit
    :                         // literal ':'
    'd+                       // at least one digit
)                         // end of captouring group

希望能有所帮助。

var s = '"a:14:{s:10:"dataformat";s:3:"mp3";s:8:"channels";i:2;s:11:"sample_rate";i:44100;s:7:"bitrate";i:192000;s:11:"channelmode";s:12:"joint stereo";s:12:"bitrate_mode";s:3:"cbr";s:8:"lossless";b:0;s:15:"encoder_options";s:6:"CBR192";s:17:"compression_ratio";d:0.1360544217687074952660708504481590352952480316162109375;s:10:"fileformat";s:3:"mp3";s:8:"filesize";i:7249920;s:9:"mime_type";s:10:"audio/mpeg";s:6:"length";i:302;s:16:"length_formatted";s:4:"5:02";}"';
var x = s.split('length_formatted";s:')[1].split('"')[1];
alert(x);

找到这个字符串的'length_formatted";s:',现在将其拆分为最后一部分,然后用"将其拆分,从结果中取出中间部分!

您可以这样做:

var lengthFormatted = string.match(/length_formatted"[^"]*"([^"]*)"/).pop(); // => 5:02

这假设:

"length_formatted";s:4:"5:02"

也可能是这样的:

"length_formatted";all_kinds_of_random_stuff_h3r3;;;;"5:02"

这很有效。这假设s:14将始终是长度。我在;上拆分垃圾,然后查看是否与s:4匹配并记录索引。然后提取文本。

 $(document).ready(function () {
    //var cow =  'Check out this image <a href="http://link.com"><img src="http://image.com" style="border:2px solid #ccc;" /></a> and one with a width <a href="http://link.com"><img src="http://image.com" width="700" align="left" /></a>';
    var yourString = 'a:14:{s:10:"dataformat";s:3:"mp3";s:8:"channels";i:2;s:11:"sample_rate";i:44100;s:7:"bitrate";i:192000;s:11:"channelmode";s:12:"joint stereo";s:12:"bitrate_mode";s:3:"cbr";s:8:"lossless";b:0;s:15:"encoder_options";s:6:"CBR192";s:17:"compression_ratio";d:0.1360544217687074952660708504481590352952480316162109375;s:10:"fileformat";s:3:"mp3";s:8:"filesize";i:7249920;s:9:"mime_type";s:10:"audio/mpeg";s:6:"length";i:302;s:16:"length_formatted";s:4:"5:02";}"';
    var eachPart = yourString.split(";");
    var re = /s:4/i;
    var count = 0;
    for(var i = 0; i < eachPart.length; i++) {
        console.log(eachPart[i]);
        var found = eachPart[i].match(re);
        if(found)
            count = i;
    }
    re = /".*?"/;
    var yourLength = extractText(eachPart[count]);
    console.log(yourLength);
});

function extractText( str ){
    var ret = "";
    if ( /"/.test( str ) ){
        ret = str.match( /"(.*?)"/ )[1];
    } else {
        ret = str;
    }
    return ret;
}