Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.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 用于提取S'的正则表达式#';E'#';_Javascript_Regex - Fatal编程技术网

Javascript 用于提取S'的正则表达式#';E'#';

Javascript 用于提取S'的正则表达式#';E'#';,javascript,regex,Javascript,Regex,我们有一组文件,它们的名称类似于,'My.File.S01E01.something.something'或'My.File.S01E02.other.something'或'My_File.S1E1.something' 我试图做的是提取S01E01或S1E1之前的文本(例如,上面将返回My.File.或My_文件。并提取S和E的值,即S01(S=01)或S1(S=1)等 有人知道我怎么做吗?或者给我指出正确的方向,我真的不确定。试试: var file = 'My.File.S01E02.s

我们有一组文件,它们的名称类似于,
'My.File.S01E01.something.something'
'My.File.S01E02.other.something'
'My_File.S1E1.something'

我试图做的是提取
S01E01
S1E1
之前的文本(例如,上面将返回
My.File.
My_文件。
并提取S和E的值,即
S01(S=01)
S1(S=1)

有人知道我怎么做吗?或者给我指出正确的方向,我真的不确定。

试试:

var file = 'My.File.S01E02.something.something';
var S = file.match(/(?:\.S)([0-9]+)(?:E[0-9]+\.)/)[1];
var E = file.match(/(?:\.S[0-9]+E)([0-9]+)(?:\.)/)[1];
下一步:


您可以匹配
S###
之前的所有文本,而不必担心特别匹配
S###E#
。关键是检查确保
S
之前没有数字或字母。例如,您可能希望忽略
filenames02

此外,一些torrent在名称前面包含垃圾邮件。例如
[torrent.com]My.File.S01E01.zip
,您也可以跳过它(如果您愿意)

只与文件名匹配的正则表达式是
/^(\[.+\])?(.+[^a-z0-9])(?=S\d)/i
。如果要包含垃圾邮件,则只需
/^(.+[^a-z0-9])(?=S\d)/i

var names = [
    "My.File.S1E1.something",
    "My File S01E01.something",
    "[--spam--] My.File.S01E01.something",
    "My.Files S01 something",

    // these won't match
    "My.FilesS01E01.something"
];
for(var i=0; i < names.length; i++)
{
    var name = names[i];
    name = name.match(/^(\[.+\])?(.+[^a-z0-9])(?=S\d)/i);
    $('body').append('<div>'+name[2]+'</div>');
}
var名称=[
“My.File.S1E1.something”,
“我的文件S01E01.something”,
“[--垃圾邮件--]My.File.S01E01.something”,
“My.Files S01某物”,
//这些不相配
“我的.FilesS01E01.something”
];
对于(var i=0;i

这与其说是一个简单的正则表达式,不如说是一个算法。

var names = [
    "My.File.S1E1.something",
    "My File S01E01.something",
    "[--spam--] My.File.S01E01.something",
    "My.Files S01 something",

    // these won't match
    "My.FilesS01E01.something"
];
for(var i=0; i < names.length; i++)
{
    var name = names[i];
    name = name.match(/^(\[.+\])?(.+[^a-z0-9])(?=S\d)/i);
    $('body').append('<div>'+name[2]+'</div>');
}
var file1 = 'My.File.S01E01.something.something';
var file2 = 'My.File.S01E02.another.something';
var file3 = 'My_File.S1E1.something';

var myFiles = [file1, file2, file3];

myFiles.forEach(function(e, i){
      var myReturn = returnFileDefs(e);
      console.log(myReturn);
});

function returnFileDefs(element){
    var myResult = {};
    var mySplit = element.split('\.');
    var front = mySplit[0];
    var re = /_/g;      

    if(re.test(front)){
        myResult.front = front;
        myResult.middle = mySplit[1];
    }else{
        myResult.front = mySplit[0]+'.'+mySplit[1];
        myResult.middle = mySplit[2];
    }
    myResult.S = myResult.middle.match(/(S)([0-9]+)/)[2];
    myResult.E = myResult.middle.match(/(E)([0-9]+)/)[2];
    return myResult;
}