Es-tu sûr ? Je suis un peu surpris. Je penserais que si ton regex est suffisamment gourmand, tu devrais pouvoir le faire correspondre. Note que supprimer le point des caractères de délimitation casse la création de liens pour les mots à la fin de la phrase.
J’ai fait un petit test avec ton regex ci-dessous sur regex101.com et il semble fonctionner avec les caractères de délimitation actuels, voir regex101: build, test, and debug regex
Note que si je comprends bien ton objectif, tu pourrais avoir besoin de transformer certains de tes groupes capturants en groupes non capturants avec (?:)
L’impossibilité d’utiliser | est très ennuyeuse, je suis d’accord. Note que pour la partie ID|id, tu peux simplement utiliser le modificateur i pour rendre le regex insensible à la casse. Pour les nombres, si tu as vraiment besoin de la plage exacte entre 1-10 et 1-100, alors c’est délicat, se relâcher à 1-19 et 1-199 le rendrait plus facile.
Voici ton regex avec des groupes non capturants qui, je pense, devrait fonctionner
@danekhollas merci pour vos commentaires et pour l’expression régulière ! J’ai modifié le code en fonction de vos commentaires, la PR est prête à être examinée.
J’ai trouvé deux problèmes majeurs avec les mots surveillés intégrés :
impossible d’ajouter des regex complexes : une erreur s’est produite : le mot est trop long (maximum 100 caractères)
impossible d’utiliser des caractères arbitraires comme délimiteurs de mots : à savoir le trait de soulignement
l’incapacité de modifier les règles ou de changer l’ordre d’exécution est également loin d’être idéale
La PR pour le composant expose les délimiteurs de mots à l’utilisateur, et il n’y a aucun problème avec les regex longues (à part l’impossibilité d’utiliser |, ce qui est également abordé dans la PR).
Sinon, les mots surveillés fonctionnent parfaitement, et s’ils peuvent être résolus dans le cœur, je suis tout à fait pour.
Les mots surveillés ne respectent pas l’unicode, ils traitent tous les caractères unicode comme des limites de mots (lors de l’utilisation de \b, mais c’est à prévoir, je suppose).
Et plus encore (j’ai testé des cas avec les mots surveillés et j’ai trouvé ces deux-là) :
Le mot surveillé \"\\bid\\(d+)\\b\" est une expression régulière invalide. (vrai, mais il ajoute quand même la règle)
\\bid\\s?(\\d+)\\b → https://example.com/id$1 se transforme en lien https://example.com/id%241 (ajoute $1 encodé en URL au lieu de faire la substitution)
La substitution n’est pas prise en charge ou s’agit-il d’un bug ?
Quelqu’un a-t-il trouvé une solution de contournement pour utiliser des barres verticales | à ce stade ? J’ai des expressions régulières où elles sont cruciales.
Salut, merci d’avoir développé ce thème incroyable, je l’ai tellement aimé ! Pourriez-vous le publier pour que tous les utilisateurs puissent l’utiliser ? Et pas seulement les administrateurs
Ce composant de thème que vous avez lié est une adaptation de celui de Sam que j’ai faite comme solution de contournement pour un besoin que vous avez décrit dans un autre sujet.
Ce sont de simples composants de thème qui ne font que changer la façon dont ces mots sont rendus dans un message (celui de Sam convertit des mots spécifiques en liens, le mien convertit des mots spécifiques en images) en fonction des paramètres du composant de thème, qui ne sont gérés que par les administrateurs.
La fonctionnalité que vous décrivez ne peut pas être réalisée dans un composant de thème, elle nécessiterait un plugin pour stocker un ensemble (mot, URL d’image) par utilisateur dans la base de données et la conversion mot-image devrait être effectuée côté serveur, lors de la construction du contenu du message cuit (en HTML). Cela ne peut pas être fait dans un composant de thème, qui n’est que du code frontend/côté client (si vous engagez quelqu’un pour faire ce travail, il est essentiel qu’il comprenne ces détails).
Ceci est hors de portée de ce composant de thème et nécessiterait un travail beaucoup plus complexe. La suggestion est de poster les détails sur la façon dont vous souhaitez que cette fonctionnalité se comporte sur Marketplace et vous pourrez y engager quelqu’un ayant une expérience préalable des internes de Discourse pour vous aider.
Cela a été soulevé à plusieurs reprises dans ce sujet, mais je voudrais vérifier à nouveau ; y a-t-il un moyen de restreindre cela à une certaine catégorie ou d’exclure des catégories ? Je voudrais l’utiliser dans notre catégorie pour débutants afin d’avoir des liens vers tous les termes de base que les nouveaux doivent apprendre, mais dans d’autres domaines, ceux-ci seraient simplement ennuyeux pour les utilisateurs expérimentés. Merci !
@Canapin vous avez négligé mon problème : il ne s’agit pas de mots répétés, mais du remplacement répété d’un seul mot par un modèle : l’URL contient le modèle à remplacer deux fois.
Étant donné que l’option de substitution de modèle /g est par défaut dans le plugin, elle devrait s’appliquer à toutes les occurrences de $1 dans le remplacement, pas seulement à la première.
C’est un cas différent que d’avoir le mot-clé apparaître plusieurs fois dans une phrase, une ligne ou un paragraphe. Le remplacement devrait tenir compte des occurrences multiples de la sélection.
Bon à savoir que linkify n’en fait qu’un, mais j’aimerais bien un par publication. Je vais peut-être essayer ça aujourd’hui, les mots surveillés sont parfois insupportables quand il trouve une correspondance.