Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярка: найти до первого нужного символа-разделителя (https://javascript.ru/forum/misc/36605-regulyarka-najjti-do-pervogo-nuzhnogo-simvola-razdelitelya.html)

Andrej_N 21.03.2013 13:38

Регулярка: найти до первого нужного символа-разделителя
 
Здравствуйте!

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

Есть, к примеру, некая переменная, в которой хранятся некоторые данные (любого типа) с разделитем, скажем, в виде тире:

nabor='1a-2a-3a-4a';

Нужно из этой переменной взять первое значение, т.е. все что до первого тире, т.е. "1a".

Пытаюсь сделать это регуляркой, но находит все что до последнего тире, т.е. "1a-2a-3a". В чем ошибка?

<html>
<body>
<script>
nabor='1a-2a-3a-4a';
pervoe_znatshenie=nabor.replace(/(.{1,})-.{1,}/, '$1');//-Нахожу 1 и более повторений любого символа до последнего тире (.{1,}) -- их и забираю, а потом вывожу через $1, после которого идет все что угодно .{1,}

alert (' nabor='+nabor+'\n pervoe_znatshenie='+pervoe_znatshenie);

</script>
</body>
</html>


И еще вопрос, можно ли как-то регуляркой считать нужные символы, чтобы, к примеру, можно было найти все что между вторым и третьим тире,
т.е. "3a"?

Пожалуйста, направьте на правильный путь!

Vasy 21.03.2013 13:51

Я не совсем хорошо прогаю и все знаю,но если я все правильн опомню то
$` Вставляет часть строки, которая предшествует найденному вхождению.
Что оно собственно вам и делает

рони 21.03.2013 13:52

Andrej_N,
var nabor='1a-2a-3a-4a';
alert(nabor.split("-")[1])

Andrej_N 21.03.2013 14:05

Рони, спасибо!

Это то, что нужно, а я полез в какие-то дебри.

danik.js 21.03.2013 14:48

Andrej_N,
А зачем писать транслитом? Тогда уж так:
String.prototype.разбить = String.prototype.split;
delete String.prototype.split;
Window.prototype.тревога = Window.prototype.alert;
delete Window.prototype.alert;

var набор ='1a-2a-3a-4a';
тревога(набор.разбить("-")[1])

рони 21.03.2013 15:01

Цитата:

Сообщение от danik.js
А зачем писать транслитом?

а почему нельзя писать транслитом?

danik.js 21.03.2013 15:10

Цитата:

Сообщение от рони
а почему нельзя писать транслитом?

Кто так сказал? Я же спросил:
Цитата:

Сообщение от danik.js
А зачем писать транслитом?


dmitriymar 21.03.2013 15:18

Цитата:

Сообщение от danik.js
Andrej_N,
А зачем писать транслитом? Тогда уж так:
1 String.prototype.разбить = String.prototype.split;
2 delete String.prototype.split;
3 Window.prototype.тревога = Window.prototype.alert;
4 delete Window.prototype.alert;
5
6 var набор ='1a-2a-3a-4a';
7 тревога(набор.разбить("-")[1])

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

danik.js 21.03.2013 15:27

Кто не понял. Я предложил вариант смеха ради )
А вобще траслит меня раздражает. Решил стать прогером - будь добр учи английский. Всеравно придется ведь (1C'ников это не касается :) )

Andrej_N 21.03.2013 17:11

danik.js, не знал даже, что такое возможно.

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

Еще один закидон: все пишу на Perl под домашним Аппачем (Денвер), включая JS :) При этом обильно комментирую и разбиваю код на части, в итоге же для заливки на сервер генерируется код JS без комментариев, максимально оптимизированный и в одну строку.

Вот до чего доводит незнание английского (к сожалению, знаю только немецкий, но в совершенстве и даже учился в Германии). Запоминаю все в немецкой транскрипции :). Это я все к тому, чтобы кто-нибудь из молодых прочитал и понял, что чтобы быть программистом, желательно сначала изучить английский -- здесь вы абсолютно правы.

jsgeek 21.03.2013 17:37

Цитата:

что чтобы быть программистом, желательно сначала изучить английский
что за ересь??? Чтобы быть программистом нужно уметь программировать а на чем и как вы пишите код это уже второстепенно. Язык программирования это инструмент для записи своих мыслей в рамках возможностей этого языка. Сейчас распространены языки с английскими синтаксисом, но ничего не мешает сделать такой самый на русском. Английский язык больше нужен для командной работы и для чтения литературы и документации (ну и для общения с иностранными заказчиками).
PS.
Хотите научиться программировать учите Scheme по этой книге, она даже опытных программистов наставляет на путь истинный :)

dmitriymar 21.03.2013 18:06

Цитата:

Сообщение от jsgeek
Хотите научиться программировать учите Scheme по этой книге, она даже опытных программистов наставляет на путь истинный

Спорное высказывание , наверно больше глупое чем спорное
Склад ума
культура программирования(коммента ии , структуры..) не зря раньше алгоритмов -пункт позволяет взаимодействовать с другими
Знание алгоритмов

...

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

jsgeek 21.03.2013 18:40

Цитата:

Спорное высказывание , наверно больше глупое чем спорное
может спорное, может глупое - это каждый решает для себя по мере своих знаний и убеждений.
Scheme - очень простоя язык с минималистичным синтаксисом, что является больше достоинством чем недостатком. Вместо того чтобы вникать в абстракции и разнообразные конструкции он предлагает минимум благодаря которому можно реализовать всё нужное для решения задач. Ты учишься сам придумывать алгоритмы а не пользоваться готовыми решениями и вникаешь в суть задачи а не с помощью абстракций отдаляешься от неё.
С ним в осносном не согласны сторонники ОО и прочих подходов, которые маскируют задачу под абстракции вместо того чтобы решать её так как она и должна решаться.

Andrej_N 21.03.2013 18:42

Я одиночка, в команде не работал. Но интуитивно выработанный свой стиль (обильное комментирование JS-кода в Perl с последующей генерацией чистого оптимизированного JS без комментариев в одну строку) вполне меня устраивает. Проблем не возникает, даже если смотрю свои скрипты и заготовки, написанные несколько лет назад. Но разметку комментариев и блоков, а так же настройку любимого EditPlus вырабатывал что называется под себя, легко в этом всем ориентируюсь. Это касается и самого Perl и даже HTML, который последние годы тоже пишу в Perl.

Не знаю даже, как бы ко мне относились, если бы я работал в команде. Разве что собирать свою команду и диктовать свой стиль в качестве условия по умолчанию. Поэтому danik.js прав, для серьезной работы все-таки нужны какие-то стандарты и культура программирования, ну и конечно знание английского. Реально трудно и нелогично запоминать команды на другом языке, как это делаю я. Например, корявое английское "width" у меня в подкорке звучит на логичном немецком как "Видтх" :) Может, поэтому я даже и не пытаюсь стать профессиональным программистом, а занимаюсь больше для души и халтурами.

Еще такой момент: начинал я увлекаться еще в те времена, когда Интернет-связь была плохая, а браузеры шибко глючные. Поэтому больше всего меня в коде раздражает его неоптимизированность и все лишние байты, которые можно сократить. Наличие комментариев к коде, предназначенном для скармливания браузеру, вообще не приемлю. Вроде, и правильно сейчас так делать и вроде как показатель культуры программиста, но меня раздражает. Может, это паранойя оптимизации, унаследованная с начала 2000-х?

А насчет структурного программирования не совсем согласен. Во всяком случае, что касается веба. Хоть браузеры и продвинулись и вроде как более-менее стандартизировались, но все еще приходится применять очень много "хаков", чтобы получить желаемый результат (для меня в первую очередь кроссбраузерность кода, контролируемая очередность загрузки и минимальный размер). Если я свой код посмотрю в валидаторе, он выдаст море ошибок и предупреждений, по зато все работает быстро. Вот на Симулинк к Матлабу когда-то давно писал (вернее даже рисовал) программы -- там все намного проще и понятней, запутаться сложно, извращения с транслитом и другими языками не требуются.

Извините за оффтопик, что-то писательское настроение нахлынуло :)

danik.js 21.03.2013 19:46

Цитата:

Сообщение от Andrej_N
Наличие комментариев к коде, предназначенном для скармливания браузеру, вообще не приемлю. Вроде, и правильно сейчас так делать и вроде как показатель культуры программиста, но меня раздражает

Как делать? В не сжимать скрипты в продакшне? Кто сказал? Само собой это проявление непрофессионализма (либо пофигизма :) )


Цитата:

Сообщение от Andrej_N
Если я свой код посмотрю в валидаторе, он выдаст море ошибок и предупреждений, по зато все работает быстро

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

Цитата:

Сообщение от Andrej_N
HTML, который последние годы тоже пишу в Perl

Я не понял - как можно html писать в perl. Про js тоже не понял.

Andrej_N 23.03.2013 16:02

Цитата:

Сообщение от danik.js
Сообщение от Andrej_N
Наличие комментариев к коде, предназначенном для скармливания браузеру, вообще не приемлю. Вроде, и правильно сейчас так делать и вроде как показатель культуры программиста, но меня раздражает
Как делать? В не сжимать скрипты в продакшне? Кто сказал? Само собой это проявление непрофессионализма (либо пофигизма )

Почти везде на сайтах новостных порталов, популярных и серьезных проектах с большим числом посетителей, включая и этот ресурс, в коде встречаю загружаемые пользователю комментарии, кучи перевода строк и табуляций -- вот зачем это? Я когда вылизываю код, борюсь за каждый символ, даже теги не все закрываю. А с учетом того, что еще и чать повторяющегося кода выношу во внешние JS, плюс стили прописываю не все в начале страницы, а по мере надобности тоже через кешируемый JS, любой валидатор просто сходит с ума. Зато все загружается быстро и как мне и пользователю надо. У меня в этом плане приоритет не соблюдение стандартов, а быстрота загрузки, контролируемая очередность и снижение нагрузки на сервер.

Цитата:

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

Конечно, сейчас ситуация не как в начале 2000-х, но все еще использую целую кучу хаков, чтобы был кроссбраузерный код. И их (хаков) довольно много.

Цитата:

Сообщение от danik.js
Я не понял - как можно html писать в perl. Про js тоже не понял.


Примерно так, как на картинке. На ней рабочий момент: часть кода js в Перле. Все разметки для себя стандартизировал в editplus. Красным идут комментарии и разметка блоков. При генерации скрипта на выходе имеем код js в одну строку без комментариев и табуляций, все переменные 2-3-символьные. Мне лично очень удобно так работать.


danik.js 23.03.2013 17:22

Andrej_N, ты наверно из Челябинска ) Там все так программируют?
Цитата:

Сообщение от Andrej_N
Почти везде на сайтах новостных порталов, популярных и серьезных проектах с большим числом посетителей, включая и этот ресурс, в коде встречаю загружаемые пользователю комментарии, кучи перевода строк и табуляций -- вот зачем это?

Это не за чем, это почему. А потому что я уже говорил - либо не умеют, либо лень. Есть еще такая штука как gzip. При сжатии объем скриптов резко уменьшается. И имена переменных автоматически "сокращаются" (я имею ввиду внутренние алгоритмы компрессии). Так что на выходе имеем немногим больши й по размеру скрипт нежели дополнительно прогнанный через минификатор.

То что у тебя на скрине - это просто пиздец. Другого слово подобрать не могу.

Andrej_N 23.03.2013 17:35

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

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

danik.js 23.03.2013 17:39

Нет слов. просто нет слов. Никогда бы не подумал что где-то на этой планете кто-то так делает, да еще и доказывает что это удобно...

Andrej_N 23.03.2013 17:42

Еще один момент -- сторонняя "сжималка" скрипта не сработает, если идет несколько внешних скриптов и они взаимодействуют переменными и функциями. А на Перле нет проблем все это обработать. Плюс еще после генерации скрипт не становится безвозвратно заоптимизированным до нечитабельного состояния -- таковым он будет только для юзера. В перл-скрипте все комментарии и нужные имена переменных всегда сохраняются.

Andrej_N 23.03.2013 17:48

На самом деле удобно до опупения. Вы попробуйте. Когда планируется более-менее серьезный JS, очень помогает не запутаться, четко все структурировать и в последующем оптимизировать. Только настроить редактор (поля и автовставки для быстрой работы). Если вообще извратиться, можно с помощью Perl еще и писать переменные JS на русском языке (только я так не пробовал), и будет это обрабатываться на машине программиста перед генерацией готового варианта скрипта, а не на хостинге и потом в браузере каждого юзера.


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