2017-04-05 10 views
3

Ich bin ziemlich neu in Regex und versuche zu lernen.Regex zum Entfernen der Firma vom Namen

Ich erstelle ein Seriendruck-Tool und möchte RegExp verwenden, um mir mehr Flexibilität und Kontrolle zu geben. Einer der Platzhalter, die ich ersetze, ist company_name.

Ich habe eine Liste von Unternehmen. Viele haben den Firmentyp in ihrem Namen (z.B. Meine Firma , Inc. oder Meine Firma LLC). Ich möchte Regex verwenden, um die Ergebnisse zu standardisieren. Ich bin mir jedoch nicht sicher, wie ich es schreiben soll, außer jede einzelne Option manuell aufzulisten. Zum Beispiel kann jeder dieser Namen sollte am Ende in den gleichen Wert ergeben:

  • My Company LLC
  • My Company, LLC
  • My Company, Inc.
  • My Company, Inc
  • MY Company Inc.
  • My Company Inc
  • My Company Co
  • My Company

Und weiter und weiter ...

Ich glaube, ich diese nutzen kann meine gewünschten Ergebnisse zu erzielen:

var companyName = lead.company_name; 
companyName = companyName.replace(/(, Inc.)|(Inc.)|(, LLC)/gi, ''); 

Allerdings habe ich es hatte gehofft, ist ein effizienter Weg, um:

  1. Capture the Variationen
  2. den Unternehmenstyp Stellen Sie sicher, ist immer am Ende
  3. Fügen Sie Kommas und Punkte, wenn sie vorhanden sind, aber nicht mit alle Optionen müssen und ohne

ACHTUNG: in den tatsächlichen Namen bestehenden ich für die Möglichkeit der Gesellschaft Lettern zu berücksichtigen haben (z Mein Co mpany Co) und nur den Organisationstyp am Ende entfernen.

Kann dies leicht gemacht werden?

+0

"_ACHTUNG: Ich muss die Möglichkeit berücksichtigen, dass die Firmenzeichen im tatsächlichen Namen vorhanden sind_" bedeutet das, dass, wenn diese Zeichen im tatsächlichen Namen vorhanden sind, sie entfernt werden sollten (oder nicht)? –

+0

Im Allgemeinen ist beispielsweise "Company, LLC" * der Firmenname. Wenn Sie "LLC" entfernen, verwenden Sie nicht mehr den richtigen Namen. – Ouroborus

+0

@Ouroborus, Sie haben Recht, aber niemand würde den vollständigen Firmennamen (mit Firmentyp) in den Text einer E-Mail eingeben, so dass es offensichtlich ist, dass es sich um eine generierte E-Mail handelt oder zusätzliche Manipulation erfordert, um sie vor dem Senden zu bereinigen . – davids

Antwort

3

Wenn jeder Firmenname eine Zeichenfolge auf seine eigene ist, können Sie die folgende regex versuchen:

/,?\s*(llc|inc|co)\.?$/i

Erläuterung:

  • Optional Komma
  • Optional Leerzeichen
  • Entweder eine von LLC/Inc/Co (ohne Berücksichtigung der Groß- und Kleinschreibung)
  • Opti onal Periode
  • Alle tun das oben am Ende des Strings

const companyNames = [ 
 
'My Company LLC', 
 
'My Company, LLC', 
 
'My Company, Inc.', 
 
'My Company, Inc', 
 
'MY Company Inc.', 
 
'My Company Inc', 
 
'My Company Co', 
 
'My Company', 
 
]; 
 

 
console.log(companyNames.map(name => name.replace(/,?\s*(llc|inc|co)\.?$/i, '')));

+0

Das funktioniert mit allem, was ich drauf werfen. Vielen Dank! – davids

5

Ja, es gibt einen effizienteren Weg (wenn effizient wir kürzer meinen), obwohl multi-bedingte Muster wie diese oft zu einem Kompromiss zwischen Prägnanz und Lesbarkeit führen.

Es handelt sich um Untergruppen, mit denen wir Wiederholungen vermeiden können.

var rgx = /(, ?)?(LLC|Inc|Co)\.?$/i; 

Lassen Sie uns es brechen.

  • Der erste Teil, (, ?)?, sagt der Firmenname gegebenenfalls durch eine Kombination aus einem Komma und einem optionalen Leerzeichen folgen sollte. Das würde also kein Komma, kein Komma ohne Leerzeichen oder ein Komma mit Leerzeichen nach dem Komma erlauben.

  • Der zweite Teil ist (LLC|Inc|Co) eine einfache Untergruppe den anderen Typ allwing Suffixe

  • Der letzte Teil, \.?, am Ende für einen optionalen Zeitraum ermöglicht (wir die Zeit, weil in den meisten REGEX Implementierungen entkommen Die Periode hat eine besondere Bedeutung und passt jedes Nicht-Leerzeichen an.

Beachten Sie auch, Sie brauchen nicht die g Flagge, da (vermutlich) keine Firmennamen haben mehr als eine Art Suffix. Auch das $ Flag ist hier nützlich, da es sicherstellt, dass unsere Übereinstimmung am Ende des Firmennamens sein muss, nicht nur irgendwo darin.

+0

Guter Punkt - bearbeitet. – Utkanos

+0

Dies konvertiert 'My Company, LLC' in' Meine Firma', – davids

+0

Vielen Dank für die Antwort und Erklärung. Das '(,?)?' Löscht das ',' jedoch nicht wie erwartet. Ansonsten funktioniert es. – davids

2

Ich würde:

companyName = companyName .replace(/,?\h*(?:\b(?:inc|LLC|co)\b\.?)?$/i,""); 

Erläuterung:

/      : delimiter 
    ,?     : optional comma 
    \h*     : optional horizontal spaces 
    (?:     : non capture group 
     \b    : word boundary 
     (?:inc|LLC|co) : non capture group, one of the alternatives 
     \b    : word boundary 
     \.?    : a dot, optional 
    )?     : end group, optional 
    $     : end of string 
/i      : delimiter, case insensitive 
+0

Warum? Können wir eine Erklärung bekommen? – Ouroborus

+0

Dies konvertiert 'My Company, LLC' zu' Mein mpany' – davids

+0

@davids: Ich habe Wortgrenzen hinzugefügt, um damit umzugehen. Siehe meine Bearbeitung. – Toto

Verwandte Themen