Регулярные выражения
- Author
- Message
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
Infocatcher
Была Но там множество подобных вопросов, хотелось бы перенести их сюда)
Мне это для скрипта надо. В основном для таких задач пользуюсь методом match. И хотелось бы расшифровки, т.к. сейчас наконец-то начинаю с этим разбираться.
Насколько я понимаю:
- значение в первых скобках - пробел и табуляция использованная сколько угодно раз;
- во вторых - всё, кроме переводов строк, сколько угодно раз.
Верно?
^ и $ для обозначения начала и конца строки, только непонятно, в одних регулярках они есть, а в других нет, так для чего они (в доках для меня многое непонятно).
Через replace работает, а через match почему-то нет...(
И работает как-то странно - только надо передавать одно значение, или $1 или $2, а если обе сразу, то не работает.
Была Но там множество подобных вопросов, хотелось бы перенести их сюда)
Мне это для скрипта надо. В основном для таких задач пользуюсь методом 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:
VladSh
Ну так match не умеет вложенные подстроки для множественного поиска.
Без них в данном случае не получится найти
(что-то)*(нечто)*
, потому что под это дело попадает пустая строка.
Ну так 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:
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:
VladSh
У match() только один аргумент.
У 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:
Infocatcher
Решил так:
Спасибо за участие!
Решил так:
Code: Select all
var sNull = str.match(/^([\s\t]*)/)[1]; //начальные "пустые" символы текущей строки
var sNotNull = str.replace(/^([\s\t]*)/, ""); //все символы текущей строки, идущие после "пустых"
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
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:
-
Offline
- Posts: 874
- Joined: Sat Jan 16, 2010 2:03 pm
1) Почему Вы решили искать дефис так? Мне думается, что \u0006 (непечатаемый символ) поиску дефисов никак способствовать не должен. И что Вы подразумеваете под дефисом (буквально)? Простой дефис, неразрывный или "минус"?guest13 wrote:...ищу все дефисы с помощью регулярного выражения [\u0006]* и не выделяет даже одного...
\u2010
\u2011
\u002D
2) Искомый "дефис" можно просто скопипастить в строку поиска и без регулярных выражений. Выглядеть он там будет не очень презентабельно ("квадратиком"), но и поиск и выделение работать будут.
-
Offline
- Posts: 874
- Joined: Sat Jan 16, 2010 2:03 pm
1. "Звездочка" в рег.выр. обозначает "ноль или больше совпадений", поэтому последовательный поиск будет спотыкаться на каждом символе (ноль совпадений). Если нужен поиск "одно или более совпадений", то используется "плюс".guest13 wrote:Может это выражение неверно?
2. "Выделение", а иначе говоря "подсветка" обеспечивается плагином Coder. Т.е. должен быть запущен Coder::HighLight. В настройках этого плагина (Вызвать Coder::Settings) на вкладке HighLight в "Automatic selection marking" (Автоматически отмечать выделенное) поставьте птичку у пункта []Enable.guest13 wrote:Вот как в браузере, ... Есть ли в этом редакторе плагин чтоли какой-нибудь?
-
Offline
- Posts: 40
- Joined: Sun Nov 15, 2009 5:53 pm
- Location: Alex