Ich möchte Erwähnungen an @Benutzernamen erfassen. Benutzernamen haben diese Regeln: (.) Wie behebt man diesen @mention regex?
- nur Kleinbuchstaben, Zahlen oder Punkte
- nicht beginnen oder enden mit einem Punkt
- nicht mehr als ein Punkt in einer Reihe (zB user..name ist nicht erlaubt, aber us.er.name ist)
So kam ich mit auf den Punkt:
/(?:^|\s)(@)(?!\.)(?!.*\.\.)(?!.*\.[\s|$])([a-z0-9\.]+)(?:\s|$)/gm;
das bedeuten sollte:
Als ein komplettes Noob mit Regexes, war ich ziemlich glücklich zu sehen, wie dies mit einer langen, mehrzeiligen Testreihe funktionierte. Aber dann habe ich versucht, den einfachsten Test-String, wie:
@foo @bar I hate you both.
In diesem Fall foo gefangen, aber bar nicht. Ich nehme an, dass, selbst wenn ich eine nicht-einfangende Gruppe benutze, @foo
auch die folgenden Leerzeichen akzeptiert, so dass @bar
bei (?:^|\s)
fehlschlägt.
Wie soll ich diesen Regex bearbeiten, damit er funktioniert?
Bitte schlagen Sie nicht einen völlig anderen @ Mention Regex vor, ich kann sehr gut nach ihnen suchen, da es andere Fragen gibt. Ich möchte nur, dass das funktioniert und zu wissen, warum es nicht funktioniert.
Was möchten Sie mit "@ foo @ bar" passieren? –
@Shawn überhaupt keinen Haken, da muss ein Leerzeichen dazwischen sein. – natario
Ihr RegEx funktioniert perfekt, wenn Sie Lookbehind verwenden ([Beispiel] (https://regex101.com/r/ypzKoJ/1)), aber ich bin sicher, dass Sie wissen, dass Javascript das nicht unterstützt. Am besten ist es, das Lookbehind in Lookahead- und Conditional-Anweisungen zu übersetzen. –