2012-01-19 3 views

risposta

20
var s = 'Hello ?, welcome to ?'; 
var a = ['foo', 'bar']; 
var i = 0; 
alert(s.replace(/\?/g,function(){return a[i++]})); 
+2

+1, non mi ero nemmeno reso conto che la sostituzione potesse svolgere una funzione. –

+2

+1 Potresti anche eliminare 'i' usando' return a.shift() '(anche se' a' sarebbe vuoto in seguito). – pimvdb

+1

@Andrew quasi tutto può avere una funzione. –

7

Tipo di stupido per mettere tutto su una sola riga, ma:

var str = 'Hello ?, welcome to ?', 
    arr = ['foo', 'bar'], 
    i = 0; 


while(str.indexOf("?") >= 0) { str = str.replace("?", arr[i++]); } 
+1

Non stupido - questo è bellissimo codice –

+1

Sarebbe più bello se si fosse str = str.replace ("?", Arr [i ++]); –

+0

Sì, stavo solo pensando a me stesso .. Aggiornamento ... E grazie per il commento! –

3

Si potrebbe utilizzare vsprintf. Anche se includi sprintf, è molto più di una riga.

vsprintf('Hello %s, welcome to %s', [foo, bar]);