Quando una corrispondenza ha successo, qualsiasi numero immediatamente precedente la parola corrispondente sarà incluso nel risultato della corrispondenza, e questo vale anche per i caratteri Unicode.
I numeri immediatamente successivi alla parola corrispondente non mostrano questo comportamento;
Ciò influisce anche sulla corrispondenza dei numeri, inclusi i casi in cui le stringhe sono composte esclusivamente da lettere inglesi e numeri. Ad esempio, “Test123” può corrispondere solo a “Test” ma non può corrispondere a “123” o a “Test123” (se stesso).
Potrei essere un po’ fuori dal giro: che tipo di regola di corrispondenza è questa? Qualcuno potrebbe spiegarmela?
Sembra un possibile bug delle espressioni regolari, che sono sempre un po’ difficili da districare. @zogstrip forse puoi dare un’occhiata dato che hai lavorato di recente in quest’area (anche se questo sembra esistere da un po’).
Ecco la mia comprensione…
Quando controlliamo le parole, ci sono 3 segmenti che devono corrispondere: iniziale, la parola, finale. Abbiamo impostato l’iniziale e il finale come caratteri non alfabetici… questi possono essere punteggiatura, spazi, OPPURE numeri. I numeri sono ciò che sta causando il mancato riscontro qui. L’intenzione è quella di essere in grado di rilevare le parole anche se c’è punteggiatura o altro prima/dopo la parola.
Quindi l’espressione regolare vede 123Test, trova Test, guarda prima e trova 3 e questo corrisponde come “non lettera”, poi guarda dopo e trova la fine della parola. Quindi corrisponde a 3Test.
Penso che dobbiamo controllare i caratteri non alfabetici E non numerici nei segmenti iniziale/finale per evitare questo? Non sono sicuro se ci sia un motivo per cui non abbiamo incluso i numeri o se sia solo una svista.
Questo dovrebbe risolvere il problema in modo definitivo questa volta. Abbiamo avuto alcune incongruenze tra la versione Ruby e la versione JS delle espressioni regolari utilizzate, ma ora non è più necessario.