Bist du sicher? Das überrascht mich ein wenig. Ich würde denken, dass du es, wenn dein Regex gierig genug ist, abgleichen kannst. Beachte, dass das Entfernen des Punktes aus den Begrenzungszeichen das Verlinken von Wörtern am Satzende beeinträchtigt.
Ich habe mit deinem Regex unten auf regex101.com einen kleinen Test gemacht und es scheint mit den aktuellen Begrenzungszeichen zu funktionieren, siehe regex101: build, test, and debug regex
Beachte, dass du, wenn ich deinen Zweck richtig verstehe, einige deiner Erfassungsgruppen in nicht erfassende Gruppen mit (?:) umwandeln musst.
Die Unfähigkeit, | zu verwenden, ist sehr ärgerlich, da stimme ich zu. Beachte, dass du für den Teil ID|id einfach den i-Modifikator verwenden kannst, um den Regex nicht case-sensitiv zu machen. Für die Zahlen, wenn du wirklich den genauen Bereich zwischen 1-10 und 1-100 benötigst, dann ist es knifflig, eine Lockerung auf 1-19 und 1-199 würde es einfacher machen.
Hier ist dein Regex mit nicht erfassenden Gruppen, von denen ich denke, dass sie funktionieren sollten
Ich habe zwei Hauptprobleme mit den integrierten beobachteten Wörtern festgestellt
Kann keine komplexen Regex hinzufügen: Ein Fehler ist aufgetreten: Wort ist zu lang (maximal 100 Zeichen)
Kann kein beliebiges Zeichen als Wortgrenze verwenden: nämlich Unterstrich
Auch die Unfähigkeit, Regeln zu bearbeiten oder die Ausführungsreihenfolge zu ändern, ist weniger als ideal
PR für die Komponente macht Wortgrenzen für den Benutzer zugänglich und es gibt keine Probleme mit langen Regex (abgesehen von der Unfähigkeit, | zu verwenden, was ebenfalls in PR behandelt wird).
Ansonsten funktionieren beobachtete Wörter perfekt, und wenn diese im Kern behoben werden können, bin ich dafür.
Dies habe ich als separaten Beitrag erstellt, der Auto-Linkify Words - #216 by md-misko folgt. Ich bin mir nicht sicher, ob diese als Fehler gelten:\n\nBeobachtete Wörter respektieren kein Unicode. Sie behandeln alle Unicode-Zeichen als Wortgrenzen (bei Verwendung von \b, aber das ist wohl zu erwarten).\n\nUnd mehr (einige Testfälle für beobachtete Wörter durchgeführt und diese beiden gefunden):\n- Das beobachtete Wort \"\\bid\\(d+)\\b\" ist ein ungültiger regulärer Ausdruck. (wahr, aber es wird trotzdem die Regel hinzugefügt)\n- \\bid\\s?(\\d+)\\b → https://example.com/id$1 wird zu https://example.com/id%241 verlinkt (fügt urlcodiertes $1 hinzu, anstatt die Ersetzung durchzuführen)\n\nIst die Ersetzung nicht unterstützt oder ist das ein Fehler?
Hat jemand zu diesem Zeitpunkt eine Problemumgehung gefunden, um vertikale Linien | zu verwenden? Ich habe einige Regex, bei denen sie entscheidend sind.
Hallo, danke, dass Sie dieses fantastische Theme entwickelt haben, ich habe es so sehr geliebt! Könnten Sie es für alle Benutzer zur Verfügung stellen und nicht nur für Administratoren?
Diese Theme-Komponente, auf die Sie verwiesen haben, ist eine Anpassung von Sams, die ich als Workaround für einen Bedarf vorgenommen habe, den Sie in einem anderen Thema beschrieben haben.
Es handelt sich um einfache Theme-Komponenten, die nur die Darstellung bestimmter Wörter in einem Beitrag ändern (Sams wandelt bestimmte Wörter in Links um, meine wandelt bestimmte Wörter in Bilder um), basierend auf den Einstellungen der Theme-Komponente, die nur von Administratoren verwaltet werden.
Das von Ihnen beschriebene Feature kann nicht in einer Theme-Komponente realisiert werden, es würde ein Plugin benötigen, um benutzerspezifische (Wort, Bild-URL)-Paare in der Datenbank zu speichern, und die Umwandlung von Wörtern in Bilder sollte serverseitig erfolgen, wenn der gekochte Beitrag (als HTML) erstellt wird. Dies kann nicht in einer Theme-Komponente erfolgen, die nur Frontend-/Client-seitigen Code enthält (wenn Sie jemanden für diese Arbeit einstellen, ist es entscheidend, dass er diese Details versteht).
Dies liegt außerhalb des Geltungsbereichs dieser Theme-Komponente und würde eine wesentlich aufwendigere Arbeit erfordern. Der Vorschlag ist, die Details, wie dieses Feature funktionieren soll, unter Marketplace zu posten, und Sie können hier jemanden mit Vorkenntnissen der Discourse-Interna beauftragen, der Ihnen hilft.
Es wurde in diesem Thema schon oft angesprochen, aber ich möchte noch einmal nachfragen: Gibt es eine Möglichkeit, dies auf eine bestimmte Kategorie zu beschränken oder Kategorien auszuschließen? Ich würde dies gerne in unserer Anfängerkategorie verwenden, um Links zu allen grundlegenden Begriffen zu haben, die Neulinge lernen müssen, aber in anderen Bereichen wären diese für erfahrene Benutzer nur störend. Danke!
Das Problem mit beobachteten Wörtern ist, dass ein beobachtetes Wort so oft verlinkt wird, wie das beobachtete Wort in einem Beitrag vorkommt. Das macht ein Durcheinander.
P.S. Sagen Sie das dreimal schnell hintereinander.
@Canapin, Sie haben mein Problem übersehen: Es geht nicht um wiederholte Wörter, sondern um die wiederholte Musterersetzung eines einzelnen Wortes: Die URL enthält das zu ersetzende Muster zweimal.
Da die /g-Musterersetzungsoption im Plugin standardmäßig aktiviert ist, sollte sie für alle Vorkommen von $1 in der Ersetzung gelten, nicht nur für das erste.
Dies ist ein anderer Fall als das mehrmalige Vorkommen des Schlüsselworts in einem Satz, einer Zeile oder einem Absatz. Die Ersetzung sollte mehrere Vorkommen der Auswahl berücksichtigen.
Ich habe Sam wegen beobachteter Wörter geantwortet.
Gut zu wissen, dass linkify nur eines macht, aber ich hätte gerne eines pro Beitrag. Ich muss das vielleicht heute ausprobieren, beobachtete Wörter sind manchmal unerträglich, wenn sie eine Übereinstimmung finden.