2016-01-11 14 views
5

kullanarak dosya adından başlığı ve yılı alın? Aşağıdaki örneklere bakınız.Ben bir dosya sayesinde, yıl başlığını alır ve varsa bir regex yazma nasıl regex

Bu çözüm php için çalışır ama im javascript Seprate movie name and year from moviefile name

The.Great.Gatsby.2013.BluRay.1080p.DTS.x264-CHD.mkv 
The Forbidden Girl 2013 BRRIP Xvid AC3-BHRG.avi 
Pain.&.Gain.2013.720p.BluRay.DD5.1.x264-HiDt.mkv 
Se7en.avi 
Se7en.(1995).avi 
How to train your dragon 2.mkv 
10,000BC (2010).1080p.avi 
+2

Bu bir önemsiz değildir çünkü bir başlık bir yıl veya biçimin adını içerebilir. – timgeb

+3

Bu,% 100 yasal amaçlarla kullanıldığı gibi görünüyor. – JosephGarrone

+0

Normal ifadenin aradığı deseni anlatabilir misiniz? Bağlamdan bağımsız bir dilbilgisi olmayan – 1252748

cevap

1
Aşağıda verilen çözüm sağladığınız tüm test durumları için çalışır

(ve titlelize gibi bazı ekstra çevirerek sorunu yaşıyor, aşağıdaki kodu görmek) ve özelleştirilebilir olması amaçlanmıştır. başlık varsayarsak

// Live Test 
 
var input = document.getElementById('input'); 
 
var output = document.getElementById('output'); 
 
input.oninput = function() { output.textContent = extractData(input.value); } 
 

 
// Samples 
 
var tests = ['The.Great.Gatsby.2013.BluRay.1080p.DTS.x264-CHD.mkv', 'The Forbidden Girl 2013 BRRIP Xvid AC3-BHRG.avi', 'Pain.&.Gain.2013.720p.BluRay.DD5.1.x264-HiDt.mkv', 'Se7en.(1995).avi', 'How to train your dragon 2.mkv', '10,000BC (2010).1080p.avi', 'The.Great.Gatsby.BluRay.1080p.DTS.x264-CHD.mkv', 'Se7en.avi', '2001 A Space Odyssey.BluRay.1080p.DTS.x264-CHD.mkv','Sand.Castle.2017.FRENCH.1080.WEBRip.AAC2.0-NEWCiNE-WwW.Zone-Telechargement.Ws.mkv']; 
 

 
while (t = tests.pop()) { 
 
    document.getElementById('list').innerHTML += '<b>INPUT</b>: "' + t + '"<br>'; 
 
    document.getElementById('list').innerHTML += extractData(t,true) + '<hr>'; 
 
} 
 

 
function titlelize(title) { 
 
    return title.replace(/(^|[. ]+)(\S)/g, function(all, pre, c) { return ((pre) ? ' ' : '') + c.toUpperCase(); }); 
 
}; 
 

 
function extractData(it, html) { 
 
    var regex = /^(.+?)[.(\t]*(?:(19\d{2}|20(?:0\d|1[0-9])).*|(?:(?=bluray|\d+p|brrip|webrip)..*)?[.](mkv|avi|mpe?g|mp4)$)/i; 
 

 
    var out = '&#8627;&nbsp;'; 
 
    
 
    if (m = regex.exec(it)) { 
 
     title = titlelize(m[1]) || '-'; year = m[2] || '-'; 
 
     out += '<font color="green"><b>Title</b>: "' + title + 
 
      '"&emsp; <b>Year</b>: "' + year + '"</font>'; 
 
    } else { 
 
     out += '<font color="red">No match</font>'; 
 
    } 
 
    //the replace is an hack to remove html in live input text 
 
    return (html) ? out : out.replace(/<[^>]+>|&[^;]+;/g,''); 
 
}
<mark><b>Paste and Try!</b></mark> &rArr; <input id="input" type="text" size="70" /> 
 
<br>&#8627;&emsp;<span id="output" style="line-height:40px;">No Match</span> 
 
<hr> 
 

 
<div id="list"></div>

Açıklama

bu kabaca yapılandırılmıştır:

Uzun lafın kısası, denemek pasajı altına

Başlık * || [Yıl *] || [Codec] köşeli parantez içine Uzatma
alanlardır opsiyonel (örneğin [field1])
*: alan

kaydedilen anahtar başlık olarak herşeyi maç için (: 1900-2016 geçerli yıl) veya dosya uzatma (bir nokta artı 3 harf olarak yapılandırılmış c basit dek geçen geçerli yıl bulana kadar gerekirse gerekirse).

durumlar: film (Hassas) bluray veya [0-9]+p (örneğin 720p, 1080p) ya da brrip ile başlayan bölüm geçerli bir yıl içermeyen durumda başlıktaki bölümünden sıyrılır.

Regex KoparmaRegex101 Demo

/^ 
    (.+?)       # Save title into group $1 
    [.(\t]*      # Remove some separators 
    (?:        # Non capturing group 
    (19\d{2}|20(?:0\d|1[0-6])).* # Save years (1900-2016) in $2 
    |        # OR 
    (?:(?=bluray|\d+p|brrip)..*)? # Match string starting with bluray,brrip,720p... 
    [.](mkv|avi|mpe?g)$)   # Match extension (.mkv,.avi.,mpeg) add your own 
/i        # make the regex case insensitive 

Regular expression visualization

Regex Özelleştirme istisna ve eski listesi arasındaki gerilimler, gerektiğinde/gerektiğinde (dosya uzantısı olarak, ör. .wmv eklemek ve .flv regex ait (mkv|avi|mpe?g|wmv|flv) bölümüne ekleyin) veya jenerik bölüm [.]\w{3,4}$ ile değiştirin yapmak.

+0

Ve başlık bir sayı içerdiğinde? – epascarello

+1

@epascarello: İlk örnekte '' Se7en.avi'' bir sayı içerir :) Sadece dizinin son sayısı '' yıl'' olarak alınır ve sadece ''1900-2016'' arasındaysa ve öncesinde bir şeyle, yani '' 2001 A Space Odyssey.mkv'' doğru şekilde ayrıştırılır. Cevabın içinde canlı bir demo var, kendiniz deneyebilirsiniz! –

+0

https://en.wikipedia.org/wiki/Dracula_2000, bir soruna neden olacak bir sayıya sahip bir film örneğidir. Sadece dosyaların adlandırma şemasında bazı aykırı şeyler olduğunu söylüyorum. (beynim bir şeyleri eksik olmadığı sürece) – epascarello