Sei sicuro? Sono un po’ sorpreso da questo. Penserei che se la tua regex fosse abbastanza “greedy” (avida) dovresti essere in grado di farla corrispondere. Nota che rimuovere il punto dai caratteri di confine interrompe la creazione di collegamenti ipertestuali a parole alla fine della frase.
Ho fatto un piccolo test con la tua regex qui sotto su regex101.com e sembra funzionare con gli attuali caratteri di confine, vedi regex101: build, test, and debug regex
Nota che se ho capito bene il tuo scopo, potresti dover trasformare alcuni dei tuoi gruppi di cattura in gruppi non di cattura con (?:)
L’impossibilità di usare | è molto fastidiosa, d’accordo. Nota che per la parte ID|id puoi semplicemente usare il modificatore i per rendere la regex insensibile alle maiuscole/minuscole. Per i numeri, se hai davvero bisogno dell’intervallo esatto tra 1-10 e 1-100, allora è complicato, rilassare a 1-19 e 1-199 lo renderebbe più facile.
Ecco la tua regex con gruppi non di cattura che penso dovrebbe funzionare
Ho riscontrato due problemi principali con le parole monitorate integrate
non è possibile aggiungere regex complesse: si è verificato un errore: Word is too long (maximum is 100 characters)
non è possibile utilizzare caratteri arbitrari come delimitatori di parola: vale a dire il trattino basso
anche l’impossibilità di modificare le regole o cambiare l’ordine di esecuzione è meno che ideale
Il PR per il componente espone i delimitatori di parola all’utente e non ci sono problemi con regex lunghe (a parte l’impossibilità di utilizzare |, che è anche affrontata nel PR).
Altrimenti le parole monitorate funzionano perfettamente, e se questi problemi possono essere risolti nel core sono tutto a favore.
Le parole monitorate non rispettano l’unicode, trattano tutti i caratteri unicode come confini di parola (quando si usa \b, ma questo è prevedibile immagino).
E altro (ho eseguito alcuni casi di test tramite parole monitorate e ho trovato questi due):
La parola monitorata \"\\bid\\(d+)\\b\" è un’espressione regolare non valida. (vero, ma aggiunge comunque la regola)
\\bid\\s?(\\d+)\\b → https://example.com/id$1 viene linkificato in https://example.com/id%241 (aggiunge $1 codificato in URL invece di eseguire la sostituzione)
La sostituzione non è supportata o si tratta di un bug?
Ciao, grazie per aver sviluppato questo fantastico tema, mi è piaciuto tantissimo! Potresti rilasciarlo affinché tutti possano usarlo? E non solo gli amministratori
Questo componente del tema che hai collegato è un adattamento di quello di Sam che ho realizzato come soluzione temporanea per un’esigenza che hai descritto in un altro argomento.
Si tratta di semplici componenti del tema che modificano solo il modo in cui queste parole vengono visualizzate in un post (quello di Sam converte parole specifiche in link, il mio converte parole specifiche in immagini) in base alle impostazioni del componente del tema, gestite solo dagli amministratori.
La funzionalità che descrivi non può essere realizzata in un componente del tema, richiederebbe un plugin per memorizzare un set di (parola, URL immagine) per utente nel database e la conversione da parola a immagine dovrebbe essere eseguita lato server, durante la creazione del contenuto del post cotto (come HTML). Queste operazioni non possono essere eseguite in un componente del tema, che è solo codice frontend/client-side (se assumi qualcuno per questo lavoro è fondamentale che comprenda questi dettagli).
Questo esula dall’ambito di questo componente del tema e richiederebbe un lavoro molto più complesso. Il suggerimento è di pubblicare i dettagli su come desideri che questa funzionalità si comporti su Marketplace e potrai assumere qui qualcuno con esperienza pregressa con gli interni di Discourse per aiutarti.
È stato sollevato molte volte in questo argomento, ma vorrei ricontrollare; c’è un modo per limitarlo a una certa categoria o escludere categorie? Vorrei usarlo nella nostra categoria per principianti per avere collegamenti a tutti i termini di base che i novellini devono imparare, ma in altre aree, questi sarebbero solo fastidiosi per gli utenti esperti. Grazie!
Il problema con le parole monitorate è che una parola monitorata viene collegata tante volte quante volte la parola monitorata appare in un post. Crea un pasticcio.
@Canapin hai trascurato il mio problema: non si tratta di parole ripetute, ma di sostituzione ripetuta di un singolo pattern di una singola parola: l’URL contiene il pattern da sostituire due volte.
Poiché l’opzione di sostituzione del pattern /g è predefinita nel plugin, dovrebbe applicarsi a tutte le occorrenze di $1 nella sostituzione, non solo alla prima.
È un caso diverso dall’avere la parola chiave che appare più volte in una frase, riga o paragrafo. La sostituzione dovrebbe tenere conto di più occorrenze della selezione.
Stavo rispondendo a Sam riguardo alle parole monitorate.
È utile sapere che linkify ne fa solo una, ma mi piacerebbe averne una per post. Potrei dover provare oggi, le parole monitorate sono a volte insopportabili quando trovano una corrispondenza.