Newsgroup: it.comp.lang.javascript
Titolo: Patterns personali in RegExp

Salve a tutti,
ho una miriade di patterns di espressioni regolari in un mio progetto 
JS. Stavo pensando di "spostarle" nell'oggetto RegExp 
(Regexp.prototype.miopattern = //). Secondo voi è corretto come metodo 
oppure c'é una altro modo (design pattern) da seguire?
Max



Ovviamente è solo un parere personale, ma non mi pare un metodo
corretto. Penso sia più corretto e pulito separare le due cose;
eventualmente puoi farti un oggetto che ti fa da "repository".
-- 
~ "L'amore è la risposta.
Ma mentre aspetti la risposta,
il sesso fa nascere alcune buone domande."
(Woody Allen)

 eventualmente puoi farti un oggetto che ti fa da "repository".
Parere condivisibile. Purtroppo credo che il problema di come gestire 
certe cose con JS sia dovuto anche alla sua natura di debole OOP 
(rientrando anche i 3D che sono stati fatti ultimamente su come gestire 
degli oggetti...)...
Max

 certe cose con JS sia dovuto anche alla sua natura di debole OOP
E' semplicemente basato su prototipi, invece che su classi. Ma non è
un "OOP debole". Semplicemente di tipo diverso.
In questo caso credo, però, che la differenza di OOP non c'entri più
di tanto. Si tratta di una problematica di OOP generica e abbastanza
comune: Ovvero, suddividere correttamente la responsabilità tra vari
oggetti. Come sicuramente saprai, non è sempre facile come sembra, e
può fare la differenza tra del codice robusto e flessibile, e uno di
più difficile manutenzione e/o poco riusabile.
 
-- 
~ "E' uno sterminio.. Non è una guerra più di quanto lo potrebbe
essere tra un uomo e un verme... O tra draghi e lupi..
O tra uomini a cavallo di draghi che lanciano lupi ai vermi!"

 più difficile manutenzione e/o poco riusabile.
Vero. Sostengo questo perché ho notato che questa difficoltà è 
incrementata con JS rispetto ad altri linguaggi (Java, C#...).
E' una personale sensazione.
A questo punto credo che dovrò costruire un oggetto per lavorare con le 
varie regexp perché le sorgenti sono somme di altre sorgenti. Quindi 
all'inizializzazione dell'oggetto dovrei "regexpare" tutto :)
Max

 all'inizializzazione dell'oggetto dovrei "regexpare" tutto :)
Mhm. Non ho capito un granché, ma l'importante è che tu abbia le
idee chiare sul come procedere :)
-- 
~ "La malinconia è la felicità di esser tristi." (Victor Hugo)

 idee chiare sul come procedere :)
Ad esempio tutte le variabili sono scritte cosě:
String.$Char      = "(?: \\u0009 | \\u000A | \\u000D | " +
                         "[\\u0020-\\uD7FF] | [\\uE000-\\uFFFD] | " +
                         "[\\u10000-\\u10FFFF] )";
String.$S             = "(?: (?: \\u0020 | \\u0009 | \\u000D | \\u000A 
)+ )";
String.$NameChar      = "(?: $Letter | $Digit | \\. | \\- | _ | : | " +
                         "$CombiningChar | $Extender )";
String.$Name          = "(?: $Letter | _ | : ) $NameChar*";
...
Alla fine c'é una funzione che le ricostruisce ricorsivamente:
String.prototype.resolve = function() {
   var resolved = this;
   var regex = /(\$[a-zA-Z0-9]+)/;
   while ( regex.test( resolved ) ) {
     resolved = resolved.replace( RegExp.$1, String[ RegExp.$1 ] );
   }
   return resolved.replace( / /g,"" );
}
Max

 String.prototype.resolve = function() {
Mhm, e perché estendi l'oggetto String per fare ciò?
-- 
~ Un computer e'  fondamentalmente stupido. Non fa cio'  che vuoi che
faccia,  ma cio' che gli  dici di fare.

 Mhm, e perché estendi l'oggetto String per fare ciò?
Ho estrapolato solo una parte del codice. Ho esteso String, poi, come ho 
detto, penso sia meglio creare un oggetto che lavora per se, che faccia 
da repository e risolvi queste sorgenti di espressioni regolari.
Qualche suggerimento?
Max