Loading...
Maria_ls avatar Maria_ls 383 Точки

[Exercises: Web Technologies Language Specifics] 16.Extract emails - Java script

http://pastebin.com/YQvsNzsG

Здравейте. Патерна ми хваща невалидни мейли, започващи с "."

pattern = /(\b|^)([a-z](?:_?[a-z0-9\-\.]+@[a-z0-9\-]+\.[a-z0-9]+([\.a-z0-9]+)?))\b/g; 

По другия начин, който се получи при C# / (\b|^)([a-z](?:_?[a-z0-9\-\.]+@[a-z0-9\-]+\.[a-z0-9]+([\.a-z0-9]+)?))\b/g; пък гърми с грешка по време на изпълнение.

На Java и на C# го бях направила с negative lookbehind, който реши проблема, но явно не се поддържа от Java script

String regex = "\\b(?<!\\S)(([a-z0-9\\-\\.]+@[a-z0-9\\-]+\\.[a-z]+([\\.a-z]+)?))\\b";

Някакви идеи за корекция?

 

 

 

Тагове:
kristina111 avatar kristina111 59 Точки
Best Answer

Промених малко твоя патърн. Идеята е с non-capturing group да провериш, дали имейлът започва с интервал или е начало на нов стринг. Само че после трябва да тримнеш, защото хваща интервала и го връща в мач-а.

А след @ може да има поне една точка, след която задължително трябва да има валиден текст. Затова малко съкратих твоя патърн като му казвам да хваща символа точка, само ако след него има текст.

Edit: също преди да принтираш, трябва да имаш проверка - (от твоя код) matches!=null  - ако е различно - принтираш. Ето кода: http://pastebin.com/vDVTz8nS . Променливата match не ти е нужна, затова я закоментирах.

това е патърна:   /(?:^| )([a-z][a-z0-9\-\._]+@[a-z0-9\-]+(\.[a-z0-9\-]+){1,})/g

Наистина JavaScript няма positive lookbehind, но интересно за мен беше, че regex101 генерира патърн за Javascript именно с него (вярно, че така го бях написала, но можеше поне да измрънка нещо :) ) в резултат на което падна чуденка защо ми гърми.

1
31/10/2016 12:38:21
Maria_ls avatar Maria_ls 383 Точки

Ей, благодаря много! А match ми е останало от когато се опитах да използвам показаното в презентацията, и изобщо не съм се сетила да го махна smiley

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.