2014-01-23 3 views
0

Я относительно не против regex. Я нашел это regex используемым и не смог понять, как именно он работает.Уточнение Regex

([\(]*([\w][\/]?[\w]?(%)?(,)?)*|[\/.]|[\w]([\-\*|\+|\\|\<\>|\=]([\(]*[\w][\/]?(%)?[\)]?[\)]?(,)?)+)*[\)]?)*$/

Я понимаю большую часть основного синтаксиса, но не в состоянии понять, что это значит.

Любая ясность в этом будет оценена! Это используется в javascript, поэтому тег.

Спасибо!

+4

Это может помочь: https://www.debuggex.com/r/MyliJBLGcB1qhHQz, или это http://regex101.com/r/vO3aI9. Тот, кто написал этот образец, действительно не знал, что они делают, если можно так выразиться. – Kobi

+0

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

ответ

2

То же без uneeded символов:

/(\(*(\w\/?\w?(%)?(,)?)*|[\/.]|\w([-*+\\<>=](\(*\w\/?(%)?\)?\)?(,)?)+)*\)?)*$/ 

Эта модель может соответствовать такой строки (или ничего):

(((a/b%,(((a/b%,///./././(((a/b%,k*((((((((P/%)),) 
+0

Хотелось бы знать, почему эти символы не нужны. Благодарю. – Aashray

+0

@Aashray: взгляните на эту ссылку: http://www.regular-expressions.info/charclass.html –

+0

@Aashray Исходное выражение имело '[]' вокруг отдельных букв. Это избыточно. – Navin

0

Чтобы узнать больше о регулярных выражениях СМОТРИТЕ: regex101 дать свой код там и прочитайте объяснение.

Ваше регулярное выражение: ([\(]*([\w][\/]?[\w]?(%)?(,)?)*|[\/.]|[\w]([\-\*|\+|\\|\<\>|\=]([\(]*[\w][\/]?(%)?[\)]?[\)]?(,)?)+)*[\)]?)*$

будет соответствовать что-нибудь подобное

(d/f%, 
something 
122 

Но будет не соответствовать что-то вроде

--{} 

Пояснение:

enter image description here

2

ваше регулярное выражение:

([\(]*([\w][\/]?[\w]?(%)?(,)?)*|[\/.]|[\w]([\-\*|\+|\\|\<\>|\=]([\(]*[\w][\/]?(%)?[\)]?[\)]?(,)?)+)*[\)]?)*$/ 

можно представить в виде:

Regular expression visualization

Debuggex Demo

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

После некоторого упрощения вы получите:

(\(*(\w\/?\w?(%)?(,)?)*|[\/.]|\w([-*|+\\<>=](\(*\w\/?(%)?\)?\)?(,)?)+)*\)?)*$/ 

Regular expression visualization

Если вы не заботитесь о группировке, то это похоже:

(\(|[\/.]|(\w\/?\w?%?,?)|\w([-*|+\\<>=](\(*\w\/?%?\)?\)?,?)+)*\)?)*$/ 

Regular expression visualization

Debuggex Demo

это имеет то преимущество, что (a*|b*)* может быть упрощена в (a|b)*

+0

Это был уже существующий фрагмент кода. После проверки этого выяснилось, что это не было проверено правильно. – Aashray