Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   не работает regexp test (https://javascript.ru/forum/misc/26586-ne-rabotaet-regexp-test.html)

asmend 15.03.2012 00:05

Цитата:

Сообщение от devote
ну тогда тебе смело могу сказать что в регах нет возможности проверять отрицания.

как нет? По книжкам где читал все так и пишется (?!слово которого не должно быть), но почему-то не работает

devote 15.03.2012 00:14

Цитата:

Сообщение от asmend
как нет? По книжкам где читал все так и пишется (?!слово которого не должно быть), но почему-то не работает

не слово а символ... парсер регов перебирает посимвольно, тоесть не находит символ если идет....

asmend 15.03.2012 01:20

Как раз слово, символ пишется так [^a]

devote 15.03.2012 01:47

Цитата:

Сообщение от asmend
Как раз слово, символ пишется так [^a]

Ты так и не понял, может все же нормально почитаем доку про работу с RegExp

возьмем пример найти test если за буквой t не идет 25
var re = /test(?!25)/;
alert( re.exec( "test25" ) ); // результат null не найдено

найти слово tes с любым окончанием, но не находить если следует 25:
var re = /tes.?(?!25)/;
alert( re.exec( "test25" ) ); // результат tes, тоесть всеравно выдал, хотя мы дали понять что не должно быть.


Вывод из всего этого, то что он проверяет не целое слово а лишь последний символ перед указанным правилом.

devote 15.03.2012 02:26

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 163226)
devote,
зачем во втором примере вопросительный знак после t?

Указывает на то что может быть любой символ.

devote 15.03.2012 02:50

Цитата:

Сообщение от Maxmaxmахimus
он указывает что буква s может быть, а может и не быть.

ну да верно, точку перед ним не поставил... но сути пример от этого не теряет.

Pavel M. 15.03.2012 09:16

Цитата:

Сообщение от asmend (Сообщение 163196)
Нужно что бы этот пример заработал как и должен. Если в строке перед "56" нет "34", то возвращал true. Если в строке перед "56" есть "34" то false. Я не понимаю почему это не работает

var str='0123456789';
var re=/(?!34)56/;
if (re.test(str))
alert('Yes');
else
alert('No');

попробуйте так

var str='0123456789';
var re=/(?!34)..56/;
if (re.test(str))
  alert('Yes'); // перед 56 нет 34
else
  alert('No');  // перед 56 есть 34


str='0123356789';
if (re.test(str))
  alert('Yes'); // перед 56 нет 34
else
  alert('No');  // перед 56 есть 34

asmend 15.03.2012 16:50

Цитата:

Сообщение от Pavel M. (Сообщение 163255)
попробуйте так

var str='0123456789';
var re=/(?!34)..56/;
if (re.test(str))
  alert('Yes'); // перед 56 нет 34
else
  alert('No');  // перед 56 есть 34


str='0123356789';
if (re.test(str))
  alert('Yes'); // перед 56 нет 34
else
  alert('No');  // перед 56 есть 34

так вроде работает, а что значат две точки?

рони 15.03.2012 19:15

Цитата:

Сообщение от Maxmaxmахimus
точка это любой непробельный символ

???

Pavel M. 15.03.2012 20:06

Цитата:

Сообщение от asmend
так вроде работает, а что значат две точки?

точек нужно столько, на сколько символов мы заглядываем вперед
в (?!34) два символа - значит две точки


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