Просмотр полной версии : RegExp: соотетствие отсутсвию строки (аналог /[^X]/ ). Как?
Здравствуйте. Вопрос такой:
Как составить регулярное выражение соответствующее тексту, не содержащиму одну из нескольких строк, например следующее выражение соответствует тексту в котором нет символов "a" или "b" или "c":
var reg:RegExp = /[^abc]/gis
а мне нужно что-то наподобие:
var reg:RegExp = /[^(not|at|all)]/gis
теоретически должно соответствовать тексту в котором нет строки "not", "at" или "all". Но это выражение не работает :(
var pattern:RegExp = /^((?!(hot|at|all)).)*$/gi;
udaaff,
Спасибо, выражение работает, только оно очень сложное для моего понимания (не совсем понятно зачем аж 3е скобок).
"Скобки" называются группами. (hot|at|all) -- группа определяет гуппы символов с оператором перестановок. Далее (?=...) -- негативная группа забегания вперед. И последняя группа ()* для применения квантификатора.
http://help.adobe.com/ru_RU/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e9a.html
Согласно написанному в приведенной статье приведенное ниже выражение pat должно соответствовать "подстроке 'для' перед которой нету слова 'только '"; следовательно replace должен выполнится только для первой строки, а вторую вернуть без изменений, но почему-то модифицируются обе строки:
var pat:RegExp = /(?!только )(для)/gis;
var str:String = "текст для replace";
var str2:String = "текст только для replace";
trace(str.replace(pat, "only $1"));
//текст only для replace
trace(str2.replace(pat, "only $1"));
//текст только only для replace
//а должно быть: текст только для replace
//ведь правда?
вероятно я упускаю какую-то мелочь... или не так понимаю принцип работы "негативной группы просмотра вперед"
В данном случае надо использовать забегание назад. В хэлпе не нашол, но работает:
var pat:RegExp = /(?<!только )(для)/gis;
Потому-что в твоем случае паттерн получается безсмысленный: ищем строку "для", которая не должна быть строкой "только ".
udaaff, Спасибо Оргомное, все работает как надо. Теперь я кажется понимаю, что значит "группа просмотра вперед" и "группа просмотра назад".
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.