Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.06.2018, 17:33
Аспирант
Отправить личное сообщение для alecto Посмотреть профиль Найти все сообщения от alecto
 
Регистрация: 12.11.2014
Сообщений: 84

Позитивный и негативный просмотр
подскажите пожалуйста, в чем может быть ошибка?

нужно вернуть 'x! baaa'
alert('xaaa baaa'.replace(/(?=x)aaa/g, '!'));

и 'xaaa b!' соответственно
alert('xaaa baaa'.replace(/(?!x)aaa/g, '!'));

вроде бы шаблоны собраны верно, но в результате возвращается исходная строка без изменений - в первом, и x! b! - во втором случае.
гугл не помог.

спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 23.06.2018, 17:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

alecto,
alert('xaaa baaa'.replace(/(x)aaa/g, '$1!'));
alert('xaaa baaa'.replace(/([^x])aaa/g, '$1!'));
Ответить с цитированием
  #3 (permalink)  
Старый 23.06.2018, 17:42
Аспирант
Отправить личное сообщение для alecto Посмотреть профиль Найти все сообщения от alecto
 
Регистрация: 12.11.2014
Сообщений: 84

вариант через карманы работает, но нужно именно через позитивный и негативный просмотр.
(?=x)
(?!x)
почему не работаю эти конструкции в регулярке?

Последний раз редактировалось alecto, 23.06.2018 в 17:50.
Ответить с цитированием
  #4 (permalink)  
Старый 23.06.2018, 17:55
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

A(?=X) - берёт символ А, после которого идёт X
AB - берёт символ А и символ B, который идёт за A
A(?=X)B - пытается найти A за которым идёт X и в то же время идёт B
Очевидно, последний вариант не найдёт ничего, потому что один и тот же символ, следующий за A, не может быть одновременно X и B.

?= и ?! "заглядывают" только вправо, если вам надо "заглядывать" влево - в регулярках как таковых для этого есть операторы(?<= и ?<! соответственно), но в javascript они не представлены.
__________________
29375, 35

Последний раз редактировалось Aetae, 23.06.2018 в 18:05.
Ответить с цитированием
  #5 (permalink)  
Старый 23.06.2018, 18:12
Аспирант
Отправить личное сообщение для alecto Посмотреть профиль Найти все сообщения от alecto
 
Регистрация: 12.11.2014
Сообщений: 84

Понял свою ошибку!
Спасибо огромное за разъяснения!
Ответить с цитированием
  #6 (permalink)  
Старый 23.06.2018, 18:43
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от Aetae
если вам надо "заглядывать" влево - в регулярках как таковых для этого есть операторы(?<= и ?<! соответственно), но в javascript они не представлены.
в новейшем стандарте добавились, и уже в Хроме
Ответить с цитированием
  #7 (permalink)  
Старый 23.06.2018, 22:55
Аспирант
Отправить личное сообщение для alecto Посмотреть профиль Найти все сообщения от alecto
 
Регистрация: 12.11.2014
Сообщений: 84

спасибо огромное! то, что нужно!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сквозной просмотр с помощью fancybox headrush Элементы интерфейса 0 12.06.2013 22:14
Помогите, подскажите. Просмотр изображений на сайте с помощью javascript. Max25 Работа 1 13.04.2013 03:01
Регулиряки негативный просмотр и прочее Антон Крамолов Общие вопросы Javascript 22 19.12.2012 14:43
Просмотр картинок внутри блока peter888 jQuery 2 23.06.2012 20:15
Просмотр профиля imant Общие вопросы Javascript 1 06.05.2009 23:24