Regex E-Mail aus Strings extrahieren

Lesezeit: 7 Minuten

Benutzer-Avatar
Zünder

Ich möchte wissen, ob ich mit regulären Ausdrücken E-Mails aus den folgenden Zeichenfolgen extrahieren kann?

Das folgende RE-Muster ist .*@.*passen zu allen Saiten. Es hat mit einigen Saiten gut funktioniert, wenn auch nicht mit allen.

Ich möchte alle Zeichenfolgen abgleichen, die mit dem E-Mail-Muster übereinstimmen, einschließlich aller Domänen wie (some-url.com) oder (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

  • Sie sollten einfach einen guten E-Mail-Regex suchen und ihn dann auf Ihren Text anwenden, z. B. hier: emailregex.com

    – Tim Biegeleisen

    23. Februar 2017 um 5:32 Uhr

  • @TimBiegeleisen hat Recht. Dies ist wahrscheinlich die häufigste Verwendung für Regex. Es gibt einige erstaunlich komplexe Muster oder ziemlich einfache. Ein schnelles Googlen hätte dir die schnellste Antwort gegeben.

    – Normaler Jo

    23. Februar 2017 um 6:27 Uhr

  • Alle bisher auf dieser Seite geteilten Muster sind grob vereinfacht und würden viele ungültige E-Mail-Adressen weitergeben und einige gute durchfallen lassen.

    – Normaler Jo

    23. Februar 2017 um 6:29 Uhr

Benutzer-Avatar
Ambris Pathak

Sie können eine Funktion mit Regex erstellen /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/ um E-Mail-IDs aus langem Text zu extrahieren

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

Skript in Aktion: Ausführen, um Ergebnis zu sehen

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._-]+@[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>

Die Regex im obigen Code-Snippet stimmt zwar mit den meisten E-Mail-Mustern überein, aber wenn Sie immer noch >99 % der E-Mail-Muster abgleichen müssen, einschließlich der Grenzfälle (wie „+“ in der E-Mail), verwenden Sie das Regex-Muster wie unten gezeigt

Skript in Aktion: Ausführen, um Ergebnis zu sehen

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-z0-9+!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/gi);
    }
     
    $("#emails").text(extractEmails(text));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<p id="emails"></p>

  • Nun, eigentlich erfasst auch die Regex in der Antwort [email protected] Um dies zu vermeiden, ändern Sie den regulären Ausdruck wie folgt: ([a-zA-Z0-9._-]+@([a-zA-Z0-9_-]+\.)+[a-zA-Z0-9_-]+)

    – Michal Bida

    3. Mai 2019 um 9:29 Uhr

  • @ambrish, können Sie diesen Code erweitern, um auch diesen Fall einzuschließen: “[email protected];[email protected],’[email protected].'” Das Problem mit dem obigen Code ist, dass der Anfang ist auch im enthalten '[email protected].' E-Mail-Adresse, also sieht das Ergebnis so aus: "[email protected]", "[email protected]", "'[email protected]"] Wie kann das entfernt werden, damit ich das Ergebnis in diesem Format erhalte? "[email protected]", "[email protected]", "[email protected]"]

    – Samtech

    31. August 2020 um 11:21 Uhr


  • @SS_flair Sie können die extrahierte E-Mail-ID mit jeder verfügbaren Ersetzungsmethode bereinigen

    – Ambrish Pathak

    1. September 2020 um 10:19 Uhr

  • Nur um zu lernen: Warum brauchen Sie den AZ-Teil, wenn Sie das i-Flag (Groß-/Kleinschreibung) verwenden?

    – Umarmungen

    20. Januar 2021 um 18:11 Uhr

  • Beachten Sie, dass diese Regex anscheinend nicht akzeptiert wird + als gültiges Zeichen. Siehe Sanjeev Sivas Antwort für eine leichte Optimierung: stackoverflow.com/a/54340560/1196465

    – David Gay

    16. April 2021 um 19:50 Uhr

Ich möchte die Antwort von @Ambrish Pathak ergänzen:

Entsprechend Wikipediaeine E-Mail-Adresse kann auch + Zeichen akzeptieren

([a-zA-Z0-9+._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)

wird wie ein Charme funktionieren

  • Das können sie auf jeden Fall. Google Mail unterstützt sogar das Hinzufügen von: [email protected] in Ihre E-Mail. Ich benutze es die ganze Zeit, wenn ich mehrere Benutzer (mit eindeutigen E-Mails) erstellen und alle E-Mails im selben Konto erhalten muss

    – Rasmus Puls

    16. September 2020 um 8:11 Uhr

[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+ hat bei mir funktioniert, Sie können das Ergebnis hier überprüfen regex101 gespeicherte Regex.

Es ist wirklich nur zweimal das gleiche Muster, getrennt durch ein @ Schild.

Das Muster ist 1 oder mehr Vorkommen von:

  • a-z: beliebiger Kleinbuchstabe
  • A-Z: beliebiger Großbuchstabe
  • 0-9: beliebige Ziffer
  • -_.: ein Bindestrich, ein Unterstrich oder ein Punkt

Wenn es einige E-Mails verpasst hat, fügen Sie fehlende Zeichen hinzu und es sollte den Zweck erfüllen.

Bearbeiten

Ich habe es zuerst nicht bemerkt, aber als ich zu dem ging Regex101-Linkdort ist ein Erläuterung Abschnitt in der oberen rechten Ecke des Bildschirms, der erklärt, was der reguläre Ausdruck findet.

  • Während der komplexeste reguläre Ausdruck für die meisten Fälle der E-Mail-Verifizierung nicht erforderlich ist, ist dieser zu stark vereinfacht. Es passt zum Beispiel user@. oder .@_.

    – Normaler Jo

    23. Februar 2017 um 6:25 Uhr

  • Was soll ich sagen, es stimmt mit allen E-Mail-Adressen in dem vom OP bereitgestellten Beispiel überein. Wenn sie ein vollständigeres Beispiel bereitstellen, passe ich es bei Bedarf gerne an.

    – Mickaël Derriey

    23. Februar 2017 um 6:39 Uhr

  • Ich kann das verstehen, aber das Problem ist, dass die Leute, wenn es mit einem Test übereinstimmt, einfach erwarten, dass es mit allem übereinstimmt. Der Fehler liegt beim OP, dass es keine einfache Google-Suche durchgeführt hat, die wahrscheinlich beliebte Ergebnisse von dieser Site zurückgegeben hätte.

    – Normaler Jo

    23. Februar 2017 um 6:47 Uhr

  • Hallo, danke fürs Teilen! Ich habe Ihre Demo aktualisiert, um zu definieren, dass E-Mails nur mit Buchstaben enden dürfen 🙂 [a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+[a-zA-Z]

    – Delphine

    10. August 2017 um 11:35 Uhr

  • + Zeichen sind in E-Mail-Adresse vor dem gültig @. das deckt das nicht ab.

    – Benutzer2924019

    10. Oktober 2018 um 13:36 Uhr

Sie können Folgendes verwenden regulärer Ausdruck um alle E-Mail-Adressen zu erfassen.

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

sehen Demo / Erklärung

Wenn Sie möchten, können Sie außerdem nur die E-Mails erfassen, die einen bestimmten Domänennamen enthalten (z. B. irgendeine-url.com) und um das zu erreichen, müssen Sie nur die ersetzen \w+\.\w+ Teil nach <domain> mit Ihrem Wunschdomainnamen. so wäre es (?<name>[\w.]+)\@(?<domain>outlook.com)(\.\w+)?

sehen Demo / Erklärung

Benutzer-Avatar
Vamshidhar HK

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}+\.[A-Z]{2,}

  • Einige Google-E-Mails enthalten das Pluszeichen

    – Benutzer50619

    12. Januar 2019 um 23:15 Uhr

Benutzer-Avatar
Rutuja Kadam

Hallo, diese Regex funktioniert bei mir nicht ……

       let items1 = document.querySelectorAll('h1');
                items1.forEach((item) => {
                    let pattern = (/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/gi)
                    if (item.innerHTML.match(pattern)) {
                        results.push({
                            emailId: item.innerHTML
                        });
                    }
                });

Dies ist das Tag, von dem ich den Text bekomme … Nur ein Beispiel.

 <h1>"dasd [email protected] asdas asdsad asdasd"</h1>

Dies ist die Objektausgabe, die ich bekomme.

[
  { emailId: 'sadasdsa [email protected]' },
  { emailId: 'sadasd [email protected]' },
  { emailId: '"[email protected]"' },
  { emailId: '"dasd [email protected] asdas"' },
  { emailId: '[email protected]' }
]

  • Einige Google-E-Mails enthalten das Pluszeichen

    – Benutzer50619

    12. Januar 2019 um 23:15 Uhr

Benutzer-Avatar
Sahil Gulati

Hoffe, das wird funktionieren.

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

Regex-Demo

  • Danke fürs Teilen, ich aktualisiere Ihre Demo, um E-Mails wie “domaine. {2}” abzufangen 🙂 [\w\.]+\@[\w]+(?:\.[\w]{3}|\.[\w]{2}\.[\w]{2}|\.[\w]{2})\b

    – Delphine

    10. August 2017 um 11:28 Uhr


1018380cookie-checkRegex E-Mail aus Strings extrahieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy