Home > Software design >  Regex in JavaScript whit multiple chars search like concat
Regex in JavaScript whit multiple chars search like concat

Time:11-10

I have a problem with regex splitting in javascript. This is my text I want to split. It is in german language, but it is irrelevant, we can say it is just a dummy.

Gesamtwirtschaft, z. B. primärer, sekundärer, tertiärer Sektor, erwerbswirtschaftliche BetriebeEinstellungsgesprächTarifverträge (z. B. Entgelttarifvertrag, Manteltarifvertrag)EntgeltfortzahlungsgesetzBGB-KündigungBetriebsvereinbarungen bzw. Personalvertretung auf Grundlage des PersonalvertretungsgesetzesKündigungsschutzgesetzWirtschaftsorganisationenArbeitnehmervertretung, BetriebsratGeltungsbereichTarifverträge (z. B. Entgelttarifvertrag, Manteltarifvertrag)IT-Weiterbildung ergänzend zur Ausbildung in den IT-BerufenSozialabgaben: Krankenversicherung, Arbeitslosenversicherung, Rentenversicherung, PflegeversicherungLohnsteuer, KirchensteuerBundeselterngeld- und ElternzeitgesetzZiele von BetriebenZiele von BetriebenRentabilitätFusionKapitalgesellschaften, z. B. GmbH, AGMärkte und PreisbildungProduktpalette und MärkteVerjährungRechtsgeschäfteUnterschiedliche Lernorte, auf regionaler EbeneMöglichkeiten und Grenzen einer Existenzgründung, BusinessplanInternationale Spezialisierung, GlobalisierungMöglichkeiten und Grenzen der sozialen Marktwirtschaft

I use this regex : /(?<=[a-z)])(?<![Gmb])(?=[A-Z])/ for splitting it by lookbehind if there is a lowercase immediately behind an uppercase letter or a closing bracket. It will not split if there was Gmb behind the uppercase letter. This is the array i get with this split:

"Array
(
    [0] => Gesamtwirtschaft, z. B. primärer, sekundärer, tertiärer Sektor, erwerbswirtschaftliche Betriebe
    [1] => Einstellungsgespräch
    [2] => Tarifverträge (z. B. Entgelttarifvertrag, Manteltarifvertrag)
    [3] => Entgeltfortzahlungsgesetz
    [4] => BGB-Kündigung
    [5] => Betriebsvereinbarungen bzw. Personalvertretung auf Grundlage des Personalvertretungsgesetzes
    [6] => Kündigungsschutzgesetz
    [7] => Wirtschaftsorganisationen
    [8] => Arbeitnehmervertretung, Betriebsrat
    [9] => Geltungsbereich
    [10] => Tarifverträge (z. B. Entgelttarifvertrag, Manteltarifvertrag)
    [11] => IT-Weiterbildung ergänzend zur Ausbildung in den IT-Berufen
    [12] => Sozialabgaben: Krankenversicherung, Arbeitslosenversicherung, Rentenversicherung, Pflegeversicherung
    [13] => Lohnsteuer, Kirchensteuer
    [14] => Bundeselterngeld- und Elternzeitgesetz
    [15] => Ziele von Betrieben
    [16] => Ziele von Betrieben
    [17] => Rentabilität
    [18] => Fusion
    [19] => Kapitalgesellschaften, z. B. GmbH, AGMärkte und Preisbildung
    [20] => Produktpalette und Märkte
    [21] => Verjährung
    [22] => Rechtsgeschäfte
    [23] => Unterschiedliche Lernorte, auf regionaler Ebene
    [24] => Möglichkeiten und Grenzen einer Existenzgründung, Businessplan
    [25] => Internationale Spezialisierung, Globalisierung
    [26] => Möglichkeiten und Grenzen der sozialen Marktwirtschaft
)
"

So my question is now how can I split arrayitem 19 after there is an AG in the lookbehind. The outcome should be this:

"Array
(
    [0] => Gesamtwirtschaft, z. B. primärer, sekundärer, tertiärer Sektor, erwerbswirtschaftliche Betriebe
    [1] => Einstellungsgespräch
    [2] => Tarifverträge (z. B. Entgelttarifvertrag, Manteltarifvertrag)
    [3] => Entgeltfortzahlungsgesetz
    [4] => BGB-Kündigung
    [5] => Betriebsvereinbarungen bzw. Personalvertretung auf Grundlage des Personalvertretungsgesetzes
    [6] => Kündigungsschutzgesetz
    [7] => Wirtschaftsorganisationen
    [8] => Arbeitnehmervertretung, Betriebsrat
    [9] => Geltungsbereich
    [10] => Tarifverträge (z. B. Entgelttarifvertrag, Manteltarifvertrag)
    [11] => IT-Weiterbildung ergänzend zur Ausbildung in den IT-Berufen
    [12] => Sozialabgaben: Krankenversicherung, Arbeitslosenversicherung, Rentenversicherung, Pflegeversicherung
    [13] => Lohnsteuer, Kirchensteuer
    [14] => Bundeselterngeld- und Elternzeitgesetz
    [15] => Ziele von Betrieben
    [16] => Ziele von Betrieben
    [17] => Rentabilität
    [18] => Fusion
    [19] => Kapitalgesellschaften, z. B. GmbH, AG
    [20] => Märkte und Preisbildung
    [21] => Produktpalette und Märkte
    [22] => Verjährung
    [23] => Rechtsgeschäfte
    [24] => Unterschiedliche Lernorte, auf regionaler Ebene
    [25] => Möglichkeiten und Grenzen einer Existenzgründung, Businessplan
    [26] => Internationale Spezialisierung, Globalisierung
    [27] => Möglichkeiten und Grenzen der sozialen Marktwirtschaft
)
"

I hope I did described everything understandable, and hope for answers! Thank you for your time!

CodePudding user response:

You can use

/(?<=[\p{Ll})]|\p{Lu}(?=\p{Lu}\p{Ll}))(?<!Gmb)(?=\p{Lu})/u

See this regex demo. Details:

  • (?<=[\p{Ll})]|\p{Lu}(?=\p{Lu}\p{Ll})) - immediately to the left of the current location, there should be either a lowercase letter, ), or an uppercase letter that is followed with an uppercase letter and then a lowercase letter
  • (?<!Gmb) - there must be no Gmb immediately to the left of the current location
  • (?=\p{Lu}) - there must be an uppercase letter immediately to the right of the current location.

Make sure you use the /u flag that enables Unicode category classes in JavaScript ECMAScript 2018 compatible regex.

  • Related