Page 3 of 13

Posted: Sun Jun 17, 2012 10:04 am
by Infocatcher
VladSh
Так ведь была же отдельная тема. :)

Встроенная замена:
Что: ^([ \t]*)([^ \t\n\r][^\n\r]*)?$
Чем: <\1>[\2]

SearchReplace.js:
Что: ^([ \t]*)([^\n\r]*)$
Чем: <$1>[$2]
[v] Многострочно

Posted: Sun Jun 17, 2012 8:01 pm
by VladSh
Infocatcher
Была :) Но там множество подобных вопросов, хотелось бы перенести их сюда)

Мне это для скрипта надо. В основном для таких задач пользуюсь методом match. И хотелось бы расшифровки, т.к. сейчас наконец-то начинаю с этим разбираться.
Насколько я понимаю:
- значение в первых скобках - пробел и табуляция использованная сколько угодно раз;
- во вторых - всё, кроме переводов строк, сколько угодно раз.
Верно?
^ и $ для обозначения начала и конца строки, только непонятно, в одних регулярках они есть, а в других нет, так для чего они (в доках для меня многое непонятно).

Через replace работает, а через match почему-то нет...(
И работает как-то странно - только надо передавать одно значение, или $1 или $2, а если обе сразу, то не работает.

Posted: Sun Jun 17, 2012 9:28 pm
by Infocatcher
VladSh
Ну так match не умеет вложенные подстроки для множественного поиска.

Code: Select all

"01234".match(/\d(\d)/); // ["01", "1"]
"01234".match(/\d(\d)/g); // ["01", "23"], то есть содержимое скобок вообще никуда не попадает
- значение в первых скобках - пробел и табуляция использованная сколько угодно раз;
- во вторых - всё, кроме переводов строк, сколько угодно раз.
Да.
^ и $ для обозначения начала и конца строки
Тоже да. :)
Без них в данном случае не получится найти
(что-то)*(нечто)*
, потому что под это дело попадает пустая строка.

Posted: Sun Jun 17, 2012 9:43 pm
by VladSh
Infocatcher
Видимо я тупой, т.к. ничего не понял) Так все доки написаны по регуляркам, - ничего непонятно))
Попробую ещё чуть покурить, т.к. разобраться всё-таки с этим надо.

Ещё надобно взять слово после определённого слова в строке; между этими словами теоретически может быть любое количество пробелов/табуляций.
Пробовал так:

Code: Select all

var varType = str.match(/Text (.+)/, "$1");
var varType = str.match(/^(Text[ \t]*)(.+)/, "$1");
но не работает.

Posted: Mon Jun 18, 2012 3:33 am
by Infocatcher
VladSh
У match() только один аргумент.

Code: Select all

"Text any string".match(/Text (.+)/)[1]; // "any string"

Posted: Tue Jun 19, 2012 8:34 pm
by VladSh
Infocatcher
Решил так:

Code: Select all

var sNull = str.match(/^([\s\t]*)/)[1];		//начальные "пустые" символы текущей строки
var sNotNull = str.replace(/^([\s\t]*)/, "");		//все символы текущей строки, идущие после "пустых"
Спасибо за участие! :D

Posted: Wed Jun 20, 2012 5:59 am
by Infocatcher
VladSh
Если строка уже получена (и не надо учитывать переводы строк), то вот так:

Code: Select all

var sNull = str.match(/^\s*/)[0];
var sNotNull = str.substr(sNull.length);

Posted: Wed Jun 20, 2012 7:31 am
by VladSh
Infocatcher
Ваш вариант красивее, и работать будет быстрей.
Спасибо!

Posted: Tue Jul 10, 2012 9:14 am
by guest13
..

Posted: Tue Jul 10, 2012 10:40 am
by opk44
guest13 wrote:...ищу все дефисы с помощью регулярного выражения [\u0006]* и не выделяет даже одного...
1) Почему Вы решили искать дефис так? Мне думается, что \u0006 (непечатаемый символ) поиску дефисов никак способствовать не должен. И что Вы подразумеваете под дефисом (буквально)? Простой дефис, неразрывный или "минус"?
\u2010
\u2011
\u002D

2) Искомый "дефис" можно просто скопипастить в строку поиска и без регулярных выражений. Выглядеть он там будет не очень презентабельно ("квадратиком"), но и поиск и выделение работать будут.

Posted: Tue Jul 10, 2012 12:17 pm
by guest13
..

Posted: Tue Jul 10, 2012 1:05 pm
by opk44
guest13 wrote:Может это выражение неверно?
1. "Звездочка" в рег.выр. обозначает "ноль или больше совпадений", поэтому последовательный поиск будет спотыкаться на каждом символе (ноль совпадений). Если нужен поиск "одно или более совпадений", то используется "плюс".
guest13 wrote:Вот как в браузере, ... Есть ли в этом редакторе плагин чтоли какой-нибудь?
2. "Выделение", а иначе говоря "подсветка" обеспечивается плагином Coder. Т.е. должен быть запущен Coder::HighLight. В настройках этого плагина (Вызвать Coder::Settings) на вкладке HighLight в "Automatic selection marking" (Автоматически отмечать выделенное) поставьте птичку у пункта []Enable.

Posted: Tue Jul 10, 2012 7:31 pm
by guest13
..

Posted: Wed Aug 08, 2012 7:46 am
by eil
подскажите, почему regex не получаеться применить для русского текста? тоесть в файле есть русс и англ, ввожу в поиск \b\w{5,6}\b и по поиску находятся только те слова, что на англ. :?
возможно уже спрашивали/отвечали, но побродив по поиску не нашел.

Posted: Wed Aug 08, 2012 7:52 am
by Serge Yolkin
eil
ЕМНИП, \w означает "любая ЛАТИНСКАЯ буква", а чтобы и русские искались, замените на [a-zA-Zа-яА-ЯёЁ]