Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с регуляркой (https://javascript.ru/forum/misc/9982-pomogite-s-regulyarkojj.html)

Aetae 24.02.2012 04:25

alert(
'    сок   молоко     работа  '.match( /\S+/g )
)

FINoM 24.02.2012 04:27

Хах, спасибо.

Mахmaxmaximus 24.02.2012 05:03

FINoM,
хочешь регуляркам за 20 минут научу)? способ расскажу, я за час выучил пока этот способ не нашел.

FINoM 24.02.2012 05:18

Цитата:

Сообщение от Mахmaxmaximus
хочешь регуляркам за 20 минут научу)? способ расскажу, я за час выучил пока этот способ не нашел.

Ну а чего меня спрашивать? Статью зафигач, чтоле.

Mахmaxmaximus 24.02.2012 05:29

во первых вот отрывок из моей "книги".

Цитата:

регулярное выражение это строка,
только не обычная строка а которая пишется между двумя слешами
/строка/
вот что такое регулярне выражение.

Можно искать совпадение с текстом этой регулярной строки используя метод Матчь.
Например

"обычная строка конь".match(/регулярная строка/)

вся эта херня вернет массив всех нахождений регулярной строки внутри обысной.

"обычная строка конь".match(/конь/)

найдет слово конь в обычной строке и вернетс ним массив ["конь"]

если бы было так

"обычная конь конь строка конь".match(/конь/)

то матчь нашел бы коня 3 раза в обычной строке и вернуоло бы массив всех нахождений
["конь", "конь", "конь"]

Регулярные выражения отличается от обычных строк не только отсутствием кавычек но еще и тем что в них можно использовать специальные символы, а в строках нет.
Например в регулярных выражениях есть комбинация \d и если мы её напишем, то этот спецсимвол(так они называются) будет означать что тут мы ожидаем увдеть цифру.

например


"обычная конь1 конь2 строка конь8".match(/конь\d/)

вернет массив из ["конь1", "конь2", "конь8"] таким образом если мы мы можем не знать какую именно цифру искать, но можем просто написать что после слова конь ожидается цифра))

каждый такой спец-символ вроде \d означает ТОЛЬКО ОДНУ ЦИФРУ)
То есть в "конь86".match(/конь\d/) найдется только ["конь8"]

то есть если мы ождаем после коня увидеть 2 цифры
то мы должны регулярное выражение писать так /конь\d\d/

все кони после которых идет НЕ 2 цифры не будут подходить и не проМатчатся)

и еще кое что, эти регулярки имеют типа режимы работы, они указываются после последнего слеша

/регулярка/g
/регулярка/i
/регулярка/m


g — глобальный поиск (обычно если епосле последнего слеша не поставить букву g, то ищется ТОЛКО ПЕРВОЕ СОВПАДЕНИЕ, если поставить g, то ищутся все совпадения); В примере выше с конем нужно ставить регулярку в режим g чтобы нашлись все кони а не только первый.

i — не различать строчные и заглавные буквы;

m — многострочный поиск.

можно использовать несколько флагов(эти буковки так называются) одновременно

например
/кОнЬ/gi - искать все совпадения с регуляркой а не только первое при том не различать заглавные и строчные.

спецсимволы которые понимает регулярка можешь посмотреть вот тут
http://javascript.ru/RegExp

Например есть даже спецсимвол означающий что мы ожидаем повторение предыдущего перед ним символа один или более раз
это символ +
то есть за место
"конь86".match(/конь\d\d/) мы можем написать
"конь86".match(/конь\d+/)
тогда найдутся все кони после который идет какая-то цифра один или более раз))
дальше сами разберетесь.
А во вторых вот способ как я научился регуляркам за 3 часа с нуля.
Это задача.

Используя эту таблицу http://javascript.ru/RegExp
, составь регулярку, которая будет находить в обычном тексте ссылки на ютьюб, при том будет сохранять в скобочную группу айдишник видео внутри этой ссылки.


потом напиши функцию чтобы она находила в тексте все такие ссылки на ютьюб, и заменяла их чисто айдишниками ютьюбовских видео.

Mахmaxmaximus 24.02.2012 05:42

А для наглядности скачай эклипс и установи на него плагин для проверки регулярок в реальном времени, я без него теперь жить не могу)) RegEx

он добавляет "вид" в эклипс который оч просто вызвать, научу потом если эклипс не юзал ни разу.

nerv_ 24.02.2012 09:32

Цитата:

Сообщение от FINoM
Помогите плиз с регуляркой: нужно разбить строку на слова, делаю так:

Я, наверное, уже опоздал, но тем не менее. Логика в моей реализации простая - ищем любые символы кроме пробельных.
var x = ' сок   молоко     работа ';
var z = x.match( /[^\s]+/g );
alert( z.join( '\n' ) );

Mахmaxmaximus 24.02.2012 16:12

nerv_,
но точка доллар цифра это тоже непробельные символы, где логика?

9xakep 24.02.2012 16:52

Я правильно понимаю, что пробелы только с начала и в конце?
<script>
var str = '    сок   молоко     работа  '
var new_str = str.split(/\s+/); //["", "сок", "молоко", "работа", ""]
new_str.pop()
new_str.shift()
for(i=0;i<new_str.length;i++) {
console.log(new_str[i]) // ["сок", "молоко", "работа"]
console.log(new_str.length) //3
}
</script>

_____________
Блин скинул, и не посмотрел что есть 2ая страница)

Mахmaxmaximus 24.02.2012 17:29

var text = "А я люблю обмазываться свежим дезодорантоми и дрочить. Каждое 23-е февраля я хожу по земле с черным мешком для мусора и собераю в него все дезодоранты и кремы для бриться которые мне дарят. На два полных мешка целый день уходит. Зато, когда после тяжёлого дня я прихожу домой, иду в ванну, включаю горячую воду…ммм и сваливаю в нее свое сокровище. И дрочу, представляя, что меня поглотил единый организм защиты отечества. Мне вообще кажется, что отечество, умеет думать, у него есть свои семьи, города, чувства, не смывайте их в унитаз, лучше приютите у себя, говорите с ними, ласкайте их…. А вчера в ванной, мне преснился чудный сон, как будто я нырнул в море, и оно прератилось в отечество, рыбы, водоросли, медузы, все из отечества,требующее защиты даже небо, даже Путин!"


alert(text.match(    /[a-zа-я\d_-]+/ig     ))



разберем на составные

[a-z    а-я    \d    _    -]+


[ab] - означает один символ ИЛИ а ИЛИ бэ, то есть квадратные скобки имею смысл ИЛИ.

в нашем примере в квадратных скобках есть 5 членов:

1) a-z любая буква от a до z
2) а-я любая буква от а до я
3) \d любая цифра
4) _ жесткий пробел
5) - дефис

так вот, квадратные скобки означают ОДИН СИМВОЛ

при чем символ этот может подходить под первый член , под ИЛИ под второй член, и.т.п.
я бы мог тупо написать в квадратных скобках ВСЕ символы ожидаемые в словах) но мне вломы писать алфавиты по этому я воспользовался комбинациями означающими алфавиты))

так вот, после квадратных скобок стоит плюс, что означает что символов подходящих под одно из того что в квадратных скобках должно быть одна или больше идущие подряд.


Часовой пояс GMT +3, время: 11:35.