Onestamente, la tua funzione potrebbe "fare una cosa", ma come hai detto tu stesso
I could start breaking up the regex into multiple functions,
il che significa che il tuo codice ex-reg fa un sacco di cose. E immagino che potrebbe essere suddiviso in unità più piccole, testabili individualmente. Tuttavia, se questa è una buona idea, non è facile rispondere (soprattutto senza vedere il codice reale). E la risposta corretta potrebbe essere né "sì" né "no", ma "non ancora, ma la prossima volta devi cambiare qualcosa in quel registro".
but feel like I would actually lose readability that way, since I am effectively switching languages
E questo è il punto centrale: hai un pezzo di codice scritto in reg ex lingua . Questo linguaggio non fornisce alcun buon mezzo di astrazione in sé (e non considero i "gruppi di cattura nominati" come una sostituzione per le funzioni). Quindi il refactoring "nella lingua del regex" non è realmente possibile, e l'intreccio dei reg exp più piccoli con la lingua ospite potrebbe non migliorare la leggibilità (almeno, senti così, ma hai dei dubbi, altrimenti il tuo non avrebbe postato la domanda). Quindi ecco il mio consiglio
-
mostra il tuo codice a un altro sviluppatore avanzato (magari su link ) per assicurarti che gli altri pensino alla leggibilità come fai tu . Siate aperti all'idea che altri potrebbero non trovare un record di 100 righe come leggibile come voi. A volte la nozione di "non facilmente infrangibile in pezzi più piccoli" può essere superata solo da un secondo paio di occhi.
-
osserva l'effettiva evoluzione - il tuo splendente reg ha ancora un aspetto così bello quando arrivano nuovi requisiti e devi implementarli e testarli? Finché il tuo reg exp funziona, non lo toccherei, ma ogni volta che qualcosa deve essere cambiato, vorrei riconsiderare se fosse davvero una buona idea mettere ogni cosa in questo grande blocco - e (sul serio!) Ripensare se dividere in pezzi più piccoli non sarebbero un'opzione migliore.
-
osserva la manutenibilità: puoi efficacemente eseguire il debug del reg exp nel modulo corrente molto bene? Soprattutto dopo aver cambiato qualcosa, e ora i tuoi test ti dicono che qualcosa non va, hai un debugger di reg exp che ti aiuta a trovare la causa principale? Se il debug diventa difficile, sarebbe anche un'occasione per riconsiderare il tuo design.