Ho un RegExp come il seguente esempio semplificato:Utilizzo di javascript regexp per trovare la prima e più lunga partita
var exp = /he|hell/;
quando l'eseguo su una stringa che mi darà la prima partita, fx:
var str = "hello world";
var match = exp.exec(str);
// match contains ["he"];
Voglio la prima e la più lunga corrispondenza possibile, e con questo intendo per ordine, quindi per lunghezza.
Poiché l'espressione è combinata da un array di RegExp, sto cercando un modo per trovare la corrispondenza più lunga senza dover riscrivere l'espressione regolare.
È possibile?
In caso contrario, sto cercando un modo per analizzare facilmente l'espressione e organizzarlo nell'ordine corretto. Ma io non riesco a capire come, perché le espressioni potrebbe essere molto più complessa, fx:
var exp = /h..|hel*/
Il tuo secondo esempio sarebbe molto più interessante se fosse per esempio: '/ h .... | hel * /' –
Sembra uguale a me. In realtà volevo illustrare che la regexp più lunga non era necessariamente la partita più lunga. La mia espressione semplice avrebbe dovuto essere qualcosa come '/ h. *? | Ciao /'. Ma immagino che gli utenti di questo sito sappiano cosa intendo in ogni caso. Almeno l'hai fatto :-) –
Se in javascript erano possibili asserzioni lookbehind a larghezza variabile (come sono ad esempio nelle espressioni regex .NET e JGsoft) potresti ottenerlo in questo modo: 'exp = /.*(?<=h .. | hel *)/'. Ma finora questa funzione non è prevista in JS. –