Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> режем строку в масив, регулярным выражением 
:(
    Опции темы
KuZyagroup
Дата 25.2.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


magento solution
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 16.4.2007
Где: Kiev

Репутация: 1
Всего: 4



Есть строка #smth(smthelse*=smthelseone)
Хочу порезать в массив split ф-цией, трабла в том что я не понимаю как задать два символа, а любой из smth может быть *
Для ясности (что б не прибегать к телепатии дам примеры)
Код

строка #smth(smthelse*=smthelseone) режется в [smth,smthelse,smthelseone]
строка #*(smthelse*=smthelseone)       в      [*,smthelse,smthelseone]

PM MAIL   Вверх
ksnk
Дата 25.2.2008, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Код

var s='#*(smthelse*=smthelseone)';//'#smth(smthelse*=smthelseone)';
alert(s.split(/#|\(|\*=|\)/));

вот так? Правда потом придется пустые строки повыкидывать...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
KuZyagroup
Дата 25.2.2008, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


magento solution
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 16.4.2007
Где: Kiev

Репутация: 1
Всего: 4



спасибо, а я забыл что * - символ перед которым нужен бэк-слэш.
П.С. Вот список всех таких символов если кому нибудь понадобится.
Код

^ [ . $ { * ( \ + ) | ? < > 

PM MAIL   Вверх
AKS
Дата 26.2.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Если мои предположения по поводу предназначения этих строк верны, то тогда имели бы смысл следующие действия.
Создать шаблон, на соответствие которому будет проверяться строка (ведь нет смысла разбивать строку, не зная ее значения, а потом еще пытаться использовать непредсказуемый результат, да еще, как отмечено, выкидывать пустые строки). Затем вызвать метод match на строке для проверки совпадения с шаблоном, тем самым убивая сразу двух зайцев:
  • проверка соответствия;
  • получение массив нужных строк.

PM MAIL   Вверх
KuZyagroup
Дата 26.2.2008, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


magento solution
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 16.4.2007
Где: Kiev

Репутация: 1
Всего: 4



AKS, я не до конца понял что вы имели в ввиду по этому сформулирую задачу которую я себе поставил.
Строка содержит три атрибута
Код

1. tag name|"*"
2. attr name | css attr name
3. attr value

Связаных #,(,*=|==|ect,)
Например
Код

#td(class*=odd)
#*(id*=i_)
#td(margin-left==15px)

PM MAIL   Вверх
AKS
Дата 26.2.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(KuZyagroup @  26.2.2008,  14:43 Найти цитируемый пост)
...я не до конца понял что вы имели в ввиду

А что непонятного? Вы пишите:
Цитата(KuZyagroup @  26.2.2008,  14:43 Найти цитируемый пост)
Строка содержит три атрибута... Связаных #,(,*=|==|ect,)

Просто переведите это на язык регулярных выражений, не забыв заключить символы, описывающие три интересующих фрагмента строки, в захватывающие скобки. Затем используйте  метод match (String.prototype.match) или exec (RegExp.prototype.exec).

PM MAIL   Вверх
KuZyagroup
Дата 26.2.2008, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


magento solution
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 16.4.2007
Где: Kiev

Репутация: 1
Всего: 4



Если я не ошибаюсь то в match-е описывают содержимое выборки. То есть что брать, а в сплит-е чем разделено то что брать
Почему по Вашему match будет рациональней чем split
P.S. Что до пустых строк которые даёт split, то я точно знаю что это будет 0-вая и 4-тая,- по этому не считаю их наличие минусом.
PM MAIL   Вверх
AKS
Дата 27.2.2008, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(KuZyagroup @  26.2.2008,  23:54 Найти цитируемый пост)
Если я не ошибаюсь то в match-е описывают содержимое выборки. То есть что брать, а в сплит-е чем разделено то что брать

Вам нужен результат (т.е. три строки - name, attr, value) или что-то еще?

Цитата(KuZyagroup @  26.2.2008,  23:54 Найти цитируемый пост)
Почему по Вашему match будет рациональней чем split

Цитата(AKS @  26.2.2008,  09:20 Найти цитируемый пост)
# проверка соответствия;
# получение массива нужных строк.


Цитата(KuZyagroup @  26.2.2008,  23:54 Найти цитируемый пост)
Что до пустых строк которые даёт split, то я точно знаю что это будет 0-вая и 4-тая

Результат выполнения кода из примера ksnk в IE видели?



Это сообщение отредактировал(а) AKS - 27.2.2008, 07:34
PM MAIL   Вверх
ksnk
Дата 27.2.2008, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(AKS @  27.2.2008,  07:34 Найти цитируемый пост)
 выполнения кода из примера ksnk в IE видели?

Гыы! забавно... Не думал, что split настолько различается. 
Действительно, match будет поприличнее
Код

var s='#*(smthelse*=smthelseone)';//'#smth(smthelse*=smthelseone)';
alert(s.match(/#(.*?)\((.*?)\*?=?=(.*?)\)/).slice(1));
 
Правда магии здесь немного больше smile

Хотя можно,конечно, для кроссбраузерности в первом варианте добавить какой-нибудь мусор сначала и с конца строки, но это немного не спортивно smile



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
KuZyagroup
Дата 27.2.2008, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


magento solution
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 16.4.2007
Где: Kiev

Репутация: 1
Всего: 4



AKS, 
ksnk, ага понял, теперь осталось полностью вкурить /#(.*?)\((.*?)\*?=?=(.*?)\)/
PM MAIL   Вверх
AKS
Дата 27.2.2008, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(ksnk @  27.2.2008,  07:56 Найти цитируемый пост)
Правда магии здесь немного больше smile

Так ведь она (магия) того стоит. Взять хотя бы упомянутый margin-left=15px. Если задать неверное значение, например '*15px', обращаясь к объекту style, то IE выдаст ошибку:
Код

elem.style.marginLeft = '*15px'; // => недопустимый аргумент

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

Цитата(ksnk @  27.2.2008,  07:56 Найти цитируемый пост)
Хотя можно,конечно, для кроссбраузерности в первом варианте добавить какой-нибудь мусор сначала и с конца строки...

Вы этому (в смысле добавки мусора) у John Resig’а научились, увлекшись jQuery?  ;)


Это сообщение отредактировал(а) AKS - 27.2.2008, 09:07
PM MAIL   Вверх
ksnk
Дата 27.2.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(AKS @  27.2.2008,  09:06 Найти цитируемый пост)
...А если к написанию регвыра подойти чуть серьезней...

Все в рамках заявленной спецификации smile
Цитата(AKS @  27.2.2008,  09:06 Найти цитируемый пост)
Вы этому (в смысле добавки мусора) у John Resig’а научились, увлекшись jQuery?  ;)

Нее! Это я и сам умею ;-)


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
AKS
Дата 27.2.2008, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(ksnk @  27.2.2008,  10:12 Найти цитируемый пост)
Все в рамках заявленной спецификации 

Да я ведь не имел ввиду ваш регвыр. Просто хотел написать, что можно установить очень жесткие условия (во избежание, т.с.).
Но теперь уж замечу, что ваш регвыр "пропустит" уже упомянутые *15px, а наверно не стоит...

Цитата(ksnk @  27.2.2008,  10:12 Найти цитируемый пост)
Нее! Это я и сам умею ;-)

Я тоже умею, если что. ;)
PM MAIL   Вверх
ksnk
Дата 27.2.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(AKS @  27.2.2008,  10:57 Найти цитируемый пост)
 уже упомянутые *15px

Замечу, что "упомянутые" вами, а не автором smile так что пока - 
Цитата(AKS @  27.2.2008,  10:57 Найти цитируемый пост)
Все в рамках заявленной спецификации




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0621 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.