const result = inputString.replace(regex, inputDollar).replace(/\\/g, '/');
document.getElementById('finale').value = result;
Le prime tre linee raccolgono il contenuto degli inputTest.
la 4 crea l'ogetto regex
la 5 sovrascrive la striga con il risultato con il metodo replace fornendogli sia la regex che le $ la input dollar che in questo caso sarà $1. Poi fa un ulteriore replace sostituendo l \ con le / mediante la regola:
stringa.replace(/\\/g, '/') che vuol dire:
/ all'inizio e alla fine sono i delimitatori della reolar in javascript
\\ significa il carattere \
g è ilqualificatore globale che fa raccogliere tutte le ricorrenze e non solo la prima dopo la virgola è il secondo argomento di replace che indica il carattere con cui verranno sostituite
Cosa fa questa regex ^(?:.*?\\){5}(.*)
^ dll'inizio
(...) le parentesi delimitano un gruppo. Ogni gruppo può essere catturato
? da solo significa: Si verifica nessuna o una volta, ? è l'abbreviazione di {0,1}.
*? quando segue un qualificatore fa sì che l'espressione regolare si fermi alla prima corrispondenza. Quindi
.*?\\ significa: 0 o più di qualsiasi carattere ma una sola corrispondenza
(?: ... ) crea un gruppo di non cattura, il che significa che la regex non restituirà l'output di questo gruppo separatamente. Viene utilizzato qui per raggruppare il .*?\\ senza creare un gruppo di cattura separato, poiché vogliamo catturare solo il testo dopo il quinto backslash. In pratica per eseguire 5 volte {5} quello che è tra parentesi (.*?\\) cioè (.*?\\){5} avremmo poi cinque gruppi e poi seguirà l'ultimo: (.*) l'unico che ci interessa. Scrivendo così: (?:.*?\\){5} cioè aggiungendo ?: facciamo in modo ch i 5 gruppi non vengano rilevati l'unico gruppo sarà:(.*) l'ultimo. Potrem cosi esrarlo con un $1 altrimenti dovevamo utilizzare $6.
?: è un unico qualificatore, se volessi utilizzare i . cocme letterale dovrei scrivere: ?\:
se uasassi: ^(.*\\).*$ otterrei tutto fini all'ultima occorrenza di \
se invece volessi catturare qeullo che c'è prima della prima occorrenza di \ allora dovrei scrivere: ^(.*?\\)
se volessi catturare quello che c'è tra la prima e la seconda occrrenza di \ scriverò: ^(.*?\\)(.*?\\). naturalmente per estrarre la stringa dovrei utilizzare $2
Se volessi estrarre tutto quello che cìè dopo la quinta occorrenza di \ potrei fare: ^(.*?\\)(.*?\\)(.*?\\)(.*?\\)(.*?\\)(.)$ oppure annullando il ritorno dei gruppicon ?: cioè: ^(?:.*?\\){5}(.*) rimarrà solo l'ultimo
Perchè ci serve questa parte della stringa?
Bisogna fare una premessa:
Normalmente quando si scrive del codice html o php si ha a disposizione una piattaforma locale ed una remota:
La piattaforma locale consta:
di una cartella dove risiedono tutti i file del sito che si stà realizzando ad es: D:\Siti\Mieisiti\lt\,
poi si ha un server di prova, un server MySql con linguaggio php, sempre sul nostro PC ad es. C:\xampp\htdocs\lt questo simula un server remoto ma risiede sul nostro Pc questo per comodità per testare il codice prima di postarlo sul server remoto.
La piattaforma remota consta:
Di un server e relativo database Mysql e linguaggio Php che invece risiedono in remoto presso un provider a cui si accede tramite link es. https://www.cersil.it/lt/
Ora immagginiamo di aver scritto una pagina dove ho la necessità di avere un percorso relativo ad es. ho un file nella cartella D:\Siti\Mieisiti\lt\ a cui voglio accedere e che ha questa path: D:\Siti\Mieisiti\lt\Agronomia\Biologia\file.html e questa è la path che potremo copiare da esplora risorse. Ma se volessimo accedere a questo file dovremo scrivere nel browser per il server locale: http://localhost/lt/Agronomia\Biologia\file.html. E se volessimo creare un hotspot su di una pagina dovremo dare solo il percorso interno ossia: Agronomia\Biologia\file.html ecco perchè abbiamo bisogno di queta parte del path.