2017-02-23 15 views
-2

Я хочу знать, может ли регулярное выражение извлекать электронную почту из следующих строк?regex extract email из строк

следующее условие: .*@.* соответствует всем строкам. к некоторым строкам, мой образец работает, но остальные из них не являются.

я хочу, чтобы соответствовать все строки совпадают с электронной почтой шаблон включают все домен как (some-url.com) или (some-url.co.id)

boleh di kirim ke email saya [email protected] tks... 
boleh minta kirim ke [email protected] 
[email protected] . 
[email protected] Senior Quantity Surveyor 
[email protected], terimakasih bu Cindy Hartanto 
[email protected] saya mau dong bu cindy 
[email protected] 
Hi Cindy ...pls share the Salary guide to [email protected] thank a 
+2

Вы должны просто LookUp хорошего регулярного выражения электронной почты, а затем применить его к тексту, например, здесь: http://emailregex.com/ –

+0

@TimBiegeleisen - это правильно. Это, вероятно, наиболее распространенное использование регулярных выражений. Есть несколько удивительно сложных моделей или довольно упрощенных. Быстрый Google дал бы вам самый быстрый ответ. –

+2

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

ответ

2

[a-zA-Z0-9-_.][email protected][a-zA-Z0-9-_.]+ работал на меня, вы можете проверить результат на этом regex101 saved regex.

Это действительно два раза тот же шаблон, разделенный знаком @.

Узор 1 или более вхождений:

  • a-z: любой строчной буквы
  • A-Z: любая заглавная буква
  • 0-9: любая цифра
  • -_.: дефис, подчеркивание или a точка

Если это не хватает некоторые электронные письма, добавьте к ним любой недостающий персонаж, и он должен сделать трюк.

Редактировать

я не заметил его первым, но при переходе к regex101 link, есть Объяснение раздел в верхнем правом углу экрана, объясняющей, что совпадает с регулярным выражением.

+0

В то время как для большинства случаев проверки подлинности электронной почты не требуется наиболее сложное регулярное выражение, это слишком упрощенно к ошибке. Например, он соответствует 'user @ .' или'. @ _'. –

+0

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

+0

Я могу оценить это, но проблема в том, что, когда он соответствует тесту, люди просто ожидают, что он будет соответствовать всем. Ошибка в OP для того, чтобы не выполнять простой поиск Google, который, вероятно, вернул бы популярные результаты с этого сайта. –

0

Надеюсь, что это сработает.

[\w\.]+\@[\w]+(?:\.[\w]{3}|\.[\w]{2}\.[\w]{2})\b

Regex Demo

+1

Спасибо за совместное использование, я обновляю вашу демоверсию, чтобы поймать электронные письма типа« domaine. {2} »:) ' [\ w \.] + \ @ [\ w] + (?: \. [ \ ш] {3} | \ [\ ш] {2} \ [\ ш] {2} |... \ [\ ш] {2}) \ b' – Delphine

3

Вы можете создать функцию с регулярным выражением /([a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/ для извлечения адресов электронных идентификаторов из длинного текста:

function extractEmails (text){ 
    return text.match(/([a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/gi); 
    } 

Script в действии: Run, чтобы увидеть результат

var text = `boleh di kirim ke email saya [email protected] tks... boleh minta kirim ke [email protected] [email protected] . 
 
[email protected] Senior Quantity Surveyor 
 
[email protected], terimakasih bu Cindy Hartanto 
 
[email protected] saya mau dong bu cindy 
 
[email protected] 
 
Hi Cindy ...pls share the Salary guide to [email protected] thank a`; 
 

 
function extractEmails (text){ 
 
    return text.match(/([a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/gi); 
 
    } 
 
     
 
    $("#emails").text(extractEmails(text));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<p id="emails"></p>

1

Для получения всех адресов электронной почты вы можете использовать регулярное выражение .

(?<name>[\w.]+)\@(?<domain>\w+\.\w+)(\.\w+)? 

см demo/explanation

дополнительно, если вы хотите, вы можете захватить только те электронные письма, которые содержат определенное доменное имя (то есть. Некоторые-URL.com), и для этого вам нужно просто заменить часть \w+\.\w+ после <domain> с вашим желаемым доменным именем. так, это было бы как (?<name>[\w.]+)\@(?<domain>outlook.com)(\.\w+)?

см demo/explanation