Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не важный порядок в регулярном выражении (https://javascript.ru/forum/misc/10888-ne-vazhnyjj-poryadok-v-regulyarnom-vyrazhenii.html)

Innuendo108 27.07.2010 01:15

Не важный порядок в регулярном выражении
 
Хочется в строке найти вот такие конструкции:
foo!test@alpha

при том ! и @ это как атрибуты и они не обязательны, и их порядок тоже не обязателен.
В итоге я хочу получить отдельно name="foo", atr_exclamation = "test" и attr_at = "alpha"

это находится вот таким регом:
/(\w+)(\!\w+)?(\@\w+)?/ - и всё находится. Но если я вдруг поменяю местами: foo@alpha!test, то он уже не найден так как надо.
Как указать в регулярном выражении, что порядок второй и третьей захватывающих скобок не важен?

рони 27.07.2010 02:25

str="  foo@alpha!test    foo!test@alpha   ";
 reg=/((\w+)(!(\w+)|@(\w+)){2})/g
 b=str.replace(reg,'\n$1 ==> name="$2",atr_exclamation="$4",attr_at="$5"');
 alert(b);

Innuendo108 27.07.2010 05:06

идею понял, спасибо.
атрибутов ! и @ может вообще не быть, поэтому мне надо было исправить {2}..исправлял на * - но как-то не помогло.
в итоге я сделал по очереди.
Сначала общим регекспом ищу всю структуру. А потом в ней ищу ! и @. (тем более их может быть несколько)

x-yuri 27.07.2010 06:05

! и @ не надо экранировать

Innuendo108 27.07.2010 14:57

x-yuri,
=)) я на всякий случай. У меня в реальном примере - там другие символы, и их надо экранировать.


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