Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярное выражение для поиска строк, не заканчивающихся определенной подстрокой. (https://javascript.ru/forum/misc/35328-regulyarnoe-vyrazhenie-dlya-poiska-strok-ne-zakanchivayushhikhsya-opredelennojj-podstrokojj.html)

sutok85 07.02.2013 18:21

Регулярное выражение для поиска строк, не заканчивающихся определенной подстрокой.
 
Помогите пожалуйста составить регулярное выражение, которое находило бы строки, которые не заканчиваются на ".pdf" .
То есть, чтобы находились строки вида "some string" и "some stringpdf", но не находились строки вида "some string.pdf"

рони 07.02.2013 18:34

sutok85,
var a = "some string",b = "some stringpdf",c = "some string.pdf"
alert([!/\.pdf$/.test(a),!/\.pdf$/.test(b),!/\.pdf$/.test(c)]);

Deff 07.02.2013 18:35

sutok85,
Приведите примеры для пары входных строк -> и выходных

devote 07.02.2013 18:37

var re = /(?:[\s\S]*\.pdf|([\s\S]*))$/i;

var lines = [
    'some string',
    'some stringpdf',
    'some string.pdf',
    'some string.PDF'
];

for(var i = 0; i < lines.length; i++) {
    alert(re.exec(lines[i])[1]);
}

rgl 07.02.2013 19:17

Зачем тут регулярные выражения?
"some string.pdf".slice( -4 ) != ".pdf"
"some string".slice( -4 ) != ".pdf"

sutok85 07.02.2013 19:30

Нужна именно регулярка. Специфика задачи.

devote - спасибо, посмотрю и эту регулярку.

Кому интересно, вот такое решение есть:

var r =  /^(?!.*\.pdf$).*/; 

console.log(r.test("some string"));     //true
console.log(r.test("some stringpdf"));  //true
console.log(r.test("some string.pdf")); //false
console.log(r.test("some string.pdfs")); //true

devote 07.02.2013 19:35

sutok85,
учитывая что тебе нужно получить true|false то собственно и правда накой черт рега? она ведь медленнее работает.

sutok85 08.02.2013 00:02

devote
Абсолютно согласен, без регулярки можно вполне обойтись здесь.

Но есть CMS-ка, которая принимает в качестве настроек регулярку js для парсинга и отбраковки url. Как-то так :)


Часовой пояс GMT +3, время: 11:37.