2010-07-23 10 views
10

So che questa è una domanda davvero stupida.Javascript: Come avere un valore in stringa rappresentato da% s e quindi sostituito con un valore

Ho avuto alcuni anni di esperienza con javascript ma questa cosa sembra aver saltato la mia mente, la mia testa è diventata vuota e non riesco a ricordare come si chiama e come farei per farlo.

Fondamentalmente quello che sto cercando è quando si dispone di una variabile stringa come ad esempio:

var error_message = "An account already exists with the email: %s" 

E poi passa una stringa in qualche modo in questo e si sostituisce il% s.

Probabilmente suono davvero idiota, ma apprezzerei molto l'aiuto/il richiamo!

Grazie ragazzi.

risposta

9

Basta usare il metodo replace:

error_message = error_message.replace('%s', email); 

Questo sostituirà solo la prima occorrenza, se si desidera sostituire più occorrenze, si utilizza un espressione regolare in modo che è possibile specificare la (g) flag globale:

error_message = error_message.replace(/%s/g, email); 
2

Si può dare un'occhiata a questo: http://www.devbox.info/javascript-sprintf.html

+0

Grazie, mi sarà sicuramente un segnalibro questo per riferimento futuro. È lì che mi sono confuso, tra PHP e Javascript, pensando che esistesse una funzione integrata. Per il progetto corrente sarà sufficiente utilizzare semplicemente la funzione di sostituzione. – jbx

+0

consiglia di chiudere poiché il collegamento è interrotto, rimuovere qualsiasi valore da questa risposta –

+0

Il collegamento sembra essere attivo in questo momento. Sembra essere un'implementazione ragionevole di sprint. Non sono sicuro che sia possibile includere le "parti essenziali" senza includere il tutto. – AShelly

0

Vedi sotto

var error_message = "An account already exists with the email: %s" 

var myNewString = error_message.replace(" %s", newdata); 

Esempio

<script type="text/javascript"> 
var visitorName = "Chuck"; 
var myOldString = "Hello username! I hope you enjoy your stay username."; 
var myNewString = myOldString.replace("username", visitorName); 

document.write("Old string = " + myOldString); 
document.write("<br />New string = " + myNewString); 

</script> 

Uscita per sopra.

Vecchia stringa = Ciao nome utente! Spero ti piaccia il tuo nome utente.
Nuova stringa = Ciao Chuck! Spero ti piaccia il tuo nome utente.

+0

@mkoryak, non sta usando un'espressione regolare .. –

1

Non c'è nulla di simile alla printf() di C o alla funzione PHP sprintf() incorporata in JavaScript. C'è il metodo replace() dell'oggetto stringa che può essere utilizzato per sostituire una cosa con un'altra - che potrebbe essere utilizzata in questo caso particolare, ma è limitata.

Ci sono diverse implementazioni in giro che altri hanno scritto che coprono un sottoinsieme del comportamento di sprintf().

1

ho appena scritto una nuova funzione per gestire questa situazione:

function sprint(str, o) { 
    if (typeof str !== "string" || typeof o !== "object") { 
     return; 
    } 
    var regex = /%s\(([a-zA-Z0-9_]{1,15})\)/g, 
     i; 
    if (regex.test(str)) { 
     str = str.replace(regex, function (found, match) { 
      return o[match]; 
     }); 
    } else { 
     for (i in o) { 
      str = str.replace(/%s/, o[i]); 
     } 
    } 
    return str; 
} 

E alcuni test:

// Ordered Array mode 
var s0 = sprint("This is %s %s call, using an %s in order", ["a", "function", "array"]); 

// Ordered|Unordered Obejct Literal mode 
var s1 = sprint("This is a %s(sw) function, %s(ma)! You need to %s(ch) this out...", { 
    ma: "mang", 
    sw: "sweet", //This is purposely out of order 
    ch: "check" 
}); 

console.log(s0); 
console.log(s1); 

https://gist.github.com/mbjordan/5807011

+0

Grazie funziona. Molto utile quando hai una serie di stringhe da mappare per ogni% s% s% s ... – JLavoie

3

Si prega di trovare un esempio qui sotto, grazie.

/** 
* @param {String} template 
* @param {String[]} values 
* @return {String} 
*/ 
function sprintf(template, values) { 
    return template.replace(/%s/g, function() { 
    return values.shift(); 
    }); 
} 

Esempio di utilizzo:

sprintf('The quick %s %s jumps over the lazy %s', [ 
    'brown', 
    'fox', 
    'dog' 
]); 

output sarebbe:

"The quick brown fox jumps over the lazy dog" 
+0

Proprio quello che stavo cercando, grazie! – Brady

+0

Prego, grazie Brady –

Problemi correlati