Решение, предлагаемое ниже работает для всех тестовых случаев вы обеспечили (и некоторыми дополнительными как titlelize см ниже код) и предназначен для настройки.
Короче говоря, попробуйте фрагмент кода ниже:
// 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 = '↳ ';
if (m = regex.exec(it)) {
title = titlelize(m[1]) || '-'; year = m[2] || '-';
out += '<font color="green"><b>Title</b>: "' + title +
'"  <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> ⇒ <input id="input" type="text" size="70" />
<br>↳ <span id="output" style="line-height:40px;">No Match</span>
<hr>
<div id="list"></div>
Описание
Предполагая название структурировано примерно как это:
Заглавие * || [Год *] || [Codec] расширения
Поля, заключенные в квадратные скобки, являются необязательными (например [field1])
*: поле спас
Ключ должен соответствовать все как титул до последнего действительного год найдено (год выпуска: 1900-2016) или до файла расширение (структурировано как точка плюс 3 буквы, прост в использовании если необходимо).
Исключение: в случае, когда пленка не содержит действительный год на всех секциях, начиная с (чувствительно к регистру) bluray
или [0-9]+p
(например 720p
, 1080p
) или brrip
удаляется из заголовка секции.
Regex Breakout Regex101 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
Regex Настройка
Список исключений и экс напряженность может быть легко заполнена новыми значениями во время тестов при необходимости/в случае необходимости (в качестве расширения файла, например. для добавления .wmv
и .flv
добавьте их в раздел (mkv|avi|mpe?g|wmv|flv)
регулярного выражения) или для того, чтобы сделать общий раздел, замените его на [.]\w{3,4}$
.
Это не тривиально, потому что заголовок может содержать год или название формата. – timgeb
Похоже, что он используется для 100% юридических целей. – JosephGarrone
Можете ли вы описать шаблон, который должен искать регулярное выражение? – 1252748