Utente:Samuele Papa/Regex

Da Wikisource.

Raccolta di pattern RegExp e di script per il loro utilizzo[modifica]

Raccomandato l'uso della console javascipt sotto Chrome, o dell'applicazione Firebug sotto Firefox per eventuali test.

Raccomandazioni d'utilizzo[modifica]

Per catturare il testo di un form di modifica pagina in una variabile testo tipo stringa, ed eseguire dei test, utilizzare in una console js il seguente codice, dopo aver aperto in modifica la pagina su cui eseguire i test:

var editbox = document.getElementsByName('wpTextbox1')[0];var testo=editbox.value;

Per inserire un pattern, bisogna ricordarsi che wikisource riconosce alcuni caratteri come speciale e li trasforma in altri, ma anche le RegEx stesse attribuiscono ad alcuni caratteri una determinata funzione, compromettendo il buon funzionamento del nostro pattern. Per renderli caratteri veri e propri e sufficiente inserire \ (backslash) prima del carattere stesso.

Per effettuare un replace, la sitassi è la seguente:

testo=testo.replace(pattern,replacer)

Dove pattern è il pattern utilizzato e replacer è la stringa con cui si deve sostituire ciò che si è trovato con il pattern.

Come funzionano le RegEx?[modifica]

Le RegEx sono delle espressioni regolari per trovare un certo testo all'interno di una stringa. Sono espressioni Case Sensitive che, di default, si fermano la prima volta che trovano qualcosa. Per farlo perdurare e sufficiente racchiudere la RegEx tra / / e aggiungere una g alla fine che sta per global, così:

/ /g

Sintassi basilare[modifica]

[0-9]  Trova le cifre da '0' a '9' all'interno di una stringa
[a-z]  Trova i caratteri da 'a' a 'z' all'interno di una stringa
[A-Z]  Trova i caratteri da 'a' a 'z' all'interno di una stringa
[a-zA-Z]  Trova i caratteri da 'a' a 'z' e da 'A' a 'Z' all'interno di una stringa
[^a-f]  Trova i caratteri che non sono da 'a' a 'f' all'interno di una stringa

RegEx permette di creare gruppi di cose trovate, attraverso i quali poi si può sostituire meglio il contenuto, attravero ( ). Facciamo un esempio:

Supponiamo di avere una stringa testo= samuele,sono; e di voler invertire l'ordine in cui appaiono. Cerchiamo tutti i caratteri fino alla prima virgola e li mettiamo in un gruppo, poi fino alla fine e li mettiamo in un altro gruppo.

([^,]+[a-zA-Z],)([a-z]+)

Apriamo la parentesi per cominciare un gruppo. Cerchiamo tutti i caratteri che non sono , con [^,] poi mettiamo una + per dire che quell'azione si ripete all'infinito. Facciamo cercare poi tutti i caratteri fino alla virgola e chiudiamo il primo gruppo. Ne apriamo un altro dove facciamo cercare tutti i caratteri fino alla fine.

Alla fine sostituiamo il tutto con:

$2$1

$2 sta per il secondo gruppo, mentre $1 sta per il primo.

RegExp utilizzate in Indice:La Sacra Bibbia (Diodati 1885).djvu[modifica]

Cattura del primo elemento tipo {{BibLink|Giov|1|3}}, 8. (citazione standard, virgola, cifra, sintassi per le liste di citazioni di diversi versetti nello stesso capitolo)

patt1=/(\{\{BibLink\|\d?\ ?\w*\|\d+\|)(\d+)(\}\})\s*(,)\s*(\d+)/;

In parole (fra parentesi i gruppi):

(Due graffe aperte + BibLink| + una o nessuna cifra + uno o nessuno spazio + lettere + carattere |) + (cifra + carattere |) 
+ (cifra) + (doppia graffa chiusa) + nessuno o più spazi + (virgola) + (cifra)

Generale[modifica]

Cattura della prima citazione formalmente corretta all'interno di una "marmellata di caratteri" come la seguente:

  • klk m, 1 4 dkkkd Luc . 2, 2 jjshhs

2 4, 11 Tim 4 1 1 Giov . 2. 2 ggags jajja

patt2=/([123]*\s*\w+)\s*\.\s*(\d+)\s*\.\s*(\d+)/;

Versetti[modifica]

Trasformare, per esempio, {{BibLink|Giov|12|23}}, 18, 28, 25. in {{BibLink|Giov|12|23}},{{BibLink|Giov|12|81|81}},{{BibLink|Giov|12|28|28}},{{BibLink|Giov|12|25|25}}.

patt=/(\{\{BibLink[^\{\{]+?[0-9]+\|)([0-9]+\}\})[,][\W]+([0-9]+)[,][\W]+([0-9]+)[,][\W]+([0-9]+)/g

Il codice funziona quando ci sono 3 versetti aggiuntivi dopo un BibLink, per farlo funzionare anche con meno, è sufficiente eliminare [,][\W]+([0-9]+) tante volte quanti sono i versetti in meno.

Nella funzione di replace si deve inserire:

$1$2,$1$3|$3}},$1$4|$4}},$1$5|$5}}

Ed eliminare tanti ,$1$5|$5}} quanti sono i versetti in meno.