Ciao, si potrebbe fare in vari modi, questo è uno:
codice:
function estraiUrl(str){
return (str.match(/\[ *null *,.*, *'(.*)\/'.*/) || [,""])[1]
}
console.log( // OUTPUT:
estraiUrl("[null1, 'pippo','http://www.google.it/','_self','']") // (stringa vuota)
,"\n", estraiUrl("[null, 'pippo','http://www.google.it/','_self','']") // http://www.google.it
,"\n", estraiUrl("[anull, 'pippo','http://www.google.it/','_self','']") // (stringa vuota)
,"\n", estraiUrl("[null, 'pippo','http://www.yahoo.it/','_self','']") // http://www.yahoo.it
)
Se servono chiarimenti chiedi pure.
Tieni presente che in casi del genere è sempre opportuno valutare quante più eventualità possibili in modo da poter formulare al meglio il parsing da eseguire sulla stringa.
Posso giusto dire che la soluzione che ho fornito soddisfa le specifiche che hai indicato, anzi fa anche qualcosa in più perché include casi in cui ci siano degli spazi attorno ai valori del pseudo-array (come mi sembra plausibile), ma è possibile che tra le svariate eventualità (cioè a seconda di come è stata scritta la stringa) saltino fuori dei risultati inattesi. Chiaramente il tutto è da valutare secondo casistiche plausibili e verosimili.