Да, всё зависит от необходимости и достаточности. Наличие "^" и "$" - дает более строгие правила для совпадения, т.е. часть строки не будет найдена, только целиком строка (или несколько строк) должна совпасть с шаблоном.
Posted: Fri Dec 11, 2015 10:32 am
by clever_man
Не могу понять почему не срабатывает regexp до конца (правая скобка не выделяется). В akelpad в coder также левая скобка не окрашивается.
Тьфу ты блин, слона-то я и не приметил)) Хвост изучил, а центральную часть нет))
Posted: Fri Jan 08, 2016 12:51 am
by VladSh
Ребята, надо удалить концевые табуляции и пробелы в строках, но только в тех, в которых есть текст, а те, которые полностью состоят из табуляций и пробелов, не трогать.
Есть регулярка: text.replace(/\S[ \t]*?$/gm, "")
но она в тех строках, где в конце нет пробелов, откусывает последний символ от текста.
Подскажите пожалуйста, что нужно изменить, чтобы это заработало?
Posted: Fri Jan 08, 2016 3:34 am
by opk44
VladSh
Непробельный символ (\S) тоже часть найденного (соответствия) и при замене на пустую строку (, "") он теряется.
Используйте скобки и обратные ссылки. Например, для стандартного диалога замены сработает такое:
Что: (\S)([ \t])*?$
Чем: \1
var hWndEdit=AkelPad.GetEditWnd();
AkelPad.TextReplace(hWndEdit, "(\\S)([ \\t]*?$)", "\\1", 0x00280001, true);
Posted: Fri Jan 08, 2016 7:25 am
by YuS
VladSh wrote:
Есть регулярка: text.replace(/\S[ \t]*?$/gm, "")
но она в тех строках, где в конце нет пробелов, откусывает последний символ от текста.
Подскажите пожалуйста, что нужно изменить, чтобы это заработало?
Помимо предложенного выше способа, можно сделать так:
- при пошаговой замене, вхождение находит, но не заменяет.
- при нажатии "Заменить всё", отрабатывает нормально.
Posted: Fri Jan 08, 2016 4:56 pm
by VladSh
opk44, YuS
Спасибо, ребята!
Временно остановился на варианте opk44. Хотелось бы узнать, когда будет исправление для 2-го варианта чтобы его начать использовать, т.к. из скрипта не сработало.
Так оно, кажется, и не должно сработать, т.к. это jscript-овская функция, а в синтаксисе регулярок для jscript вроде нет метапоследовательности \K. Оно сработает только в функции AkelPad.TextReplace
PS Пока сочинял, уже ответили, но пусть тоже останется
Posted: Fri Jan 08, 2016 9:48 pm
by VladSh
YuS
TextReplace не подходит - надо работать с программно полученным текстом. Остался на предыдущем варианте.
yozhic wrote:только можно, имхо, *? на + заменить
Этот вариант чем-то корректнее? Просто предыдущий вроде как работает без глюков..
Posted: Sat Jan 09, 2016 4:08 am
by YuS
VladSh wrote:
yozhic wrote:только можно, имхо, *? на + заменить
Этот вариант чем-то корректнее? Просто предыдущий вроде как работает без глюков..
Принципиальных отличий нет, но по смыслу корректнее искать вхождения с конечными пробельными символами, как минимум с одним. Просто нет смысла заменять то, чего нет... и квантификатор ленивости тут необязателен, скорее наоборот, для ускорения лучше сверхжадность добавить... но тут опять же возникает вопрос: а работает ли это в javascript? Ведь вышеупомянутый "\K", например, там, действительно, отсутствует и сверхжадность, вроде бы, тоже...