Регулярные выражения

Russian main discussion
  • Author
  • Message
Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

VladSh
Так ведь была же отдельная тема. :)

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

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

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher
Была :) Но там множество подобных вопросов, хотелось бы перенести их сюда)

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

Через replace работает, а через match почему-то нет...(
И работает как-то странно - только надо передавать одно значение, или $1 или $2, а если обе сразу, то не работает.
Last edited by VladSh on Sun Jun 17, 2012 9:45 pm, edited 3 times in total.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

VladSh
Ну так match не умеет вложенные подстроки для множественного поиска.

Code: Select all

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

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher
Видимо я тупой, т.к. ничего не понял) Так все доки написаны по регуляркам, - ничего непонятно))
Попробую ещё чуть покурить, т.к. разобраться всё-таки с этим надо.

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

Code: Select all

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

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

VladSh
У match() только один аргумент.

Code: Select all

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

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher
Решил так:

Code: Select all

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

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

VladSh
Если строка уже получена (и не надо учитывать переводы строк), то вот так:

Code: Select all

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

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher
Ваш вариант красивее, и работать будет быстрей.
Спасибо!

Offline
Posts: 9
Joined: Fri Jun 08, 2012 12:38 pm

Post by guest13 »

..
Last edited by guest13 on Wed May 28, 2014 1:40 am, edited 1 time in total.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

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

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

Offline
Posts: 9
Joined: Fri Jun 08, 2012 12:38 pm

Post by guest13 »

..
Last edited by guest13 on Wed May 28, 2014 1:42 am, edited 1 time in total.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

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

Offline
Posts: 9
Joined: Fri Jun 08, 2012 12:38 pm

Post by guest13 »

..
Last edited by guest13 on Wed May 28, 2014 1:43 am, edited 1 time in total.

eil
Offline
Posts: 40
Joined: Sun Nov 15, 2009 5:53 pm
Location: Alex

Post by eil »

подскажите, почему regex не получаеться применить для русского текста? тоесть в файле есть русс и англ, ввожу в поиск \b\w{5,6}\b и по поиску находятся только те слова, что на англ. :?
возможно уже спрашивали/отвечали, но побродив по поиску не нашел.

Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

eil
ЕМНИП, \w означает "любая ЛАТИНСКАЯ буква", а чтобы и русские искались, замените на [a-zA-Zа-яА-ЯёЁ]
Post Reply