wake-up-neo.net

Wie füge ich Variablen in Javascript-Strings ein (Node.js)

s = 'hello %s, how are you doing' % (my_name)

So macht man es in Python. Wie können Sie das in Javascript/node.js tun?

90
TIMEX

Wenn Sie etwas Ähnliches haben möchten, können Sie eine Funktion erstellen:

function parse(str) {
    var args = [].slice.call(arguments, 1),
        i = 0;

    return str.replace(/%s/g, () => args[i++]);
}

Verwendungszweck: 

s = parse('hello %s, how are you doing', my_name);

Dies ist nur ein einfaches Beispiel und berücksichtigt nicht verschiedene Arten von Datentypen (wie %i usw.) oder das Umgehen von %s. Aber ich hoffe es gibt dir eine Idee. Ich bin mir ziemlich sicher, dass es auch Bibliotheken gibt, die eine solche Funktion bieten.

38
Felix Kling

Mit Node.js v4 können Sie die Template-Strings von ES6 verwenden

var my_name = 'John';
var s = `hello ${my_name}, how are you doing`;
console.log(s); // prints hello John, how are you doing

Sie müssen den String innerhalb von backtick `.__ einschließen. anstelle von '

278
Sridhar

util.format tut dies. 

Es wird Teil von v0.5.3 sein und kann folgendermaßen verwendet werden:

var uri = util.format('http%s://%s%s', 
      (useSSL?'s':''), apiBase, path||'/');
37
Jim Schubert

Ab node.js>4.0 wird es mit dem ES6-Standard besser kompatibel, wo die String-Manipulation erheblich verbessert wurde.

Das answer der ursprünglichen Frage kann so einfach sein wie:

var s = `hello ${my_name}, how are you doing`;
// note: tilt ` instead of single quote '

Wenn die Zeichenfolge mehrere Zeilen umfassen kann, sind Vorlagen oder HTML/XML-Prozesse sehr einfach. Weitere Details und mehr Möglichkeiten dazu: Template-Literale sind String-Literale bei mozilla.org.

33
Andrew_1510

wenn Sie ES6 verwenden, sollten Sie die Template-Literale verwenden.

//you can do this
let sentence = `My name is ${ user.name }. Nice to meet you.`

lesen Sie hier mehr: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

16
Terrence

TU das

s = 'hello ' + my_name + ', how are you doing'
11
Merianos Nikos

Einige Möglichkeiten, String.prototype zu erweitern, oder ES2015 template literals .

var result = document.querySelector('#result');
// -----------------------------------------------------------------------------------
// Classic
String.prototype.format = String.prototype.format ||
  function () {
    var args = Array.prototype.slice.call(arguments);
    var replacer = function (a){return args[a.substr(1)-1];};
    return this.replace(/(\$\d+)/gm, replacer)
};
result.textContent = 
  'hello $1, $2'.format('[world]', '[how are you?]');

// ES2015#1
'use strict'
String.prototype.format2 = String.prototype.format2 ||
  function(...merge) { return this.replace(/\$\d+/g, r => merge[r.slice(1)-1]); };
result.textContent += '\nHi there $1, $2'.format2('[sir]', '[I\'m fine, thnx]');

// ES2015#2: template literal
var merge = ['[good]', '[know]'];
result.textContent += `\nOk, ${merge[0]} to ${merge[1]}`;
<pre id="result"></pre>

4
KooiInc

Versuchen Sie sprintf in JS oder du könntest diese Gist

4
spicavigo

const format = (...args) => args.shift().replace(/%([jsd])/g, x => x === '%j' ? JSON.stringify(args.shift()) : args.shift())

const name = 'Csaba'
const formatted = format('Hi %s, today is %s and your data is %j', name, Date(), {data: {country: 'Hungary', city: 'Budapest'}})

console.log(formatted)

3
cstuncsik

Wenn Sie node.js verwenden, verwendet console.log () die Formatzeichenfolge als ersten Parameter:

 console.log('count: %d', count);
2
Andrey Sidorov

Ich habe eine Funktion geschrieben, die das Problem genau löst.

Das erste Argument ist der String, der parametrisiert werden soll. Sie sollten Ihre Variablen wie folgt in diese Zeichenfolge einfügen "% s1,% s2, ...% s12" .

Andere Argumente sind die Parameter für diese Zeichenfolge.

/***
 * @example parameterizedString("my name is %s1 and surname is %s2", "John", "Doe");
 * @return "my name is John and surname is Doe"
 *
 * @firstArgument {String} like "my name is %s1 and surname is %s2"
 * @otherArguments {String | Number}
 * @returns {String}
 */
const parameterizedString = (...args) => {
  const str = args[0];
  const params = args.filter((arg, index) => index !== 0);
  if (!str) return "";
  return str.replace(/%s[0-9]+/g, matchedStr => {
    const variableIndex = matchedStr.replace("%s", "") - 1;
    return params[variableIndex];
  });
}

Beispiele

parameterizedString("my name is %s1 and surname is %s2", "John", "Doe");
// returns "my name is John and surname is Doe"

parameterizedString("this%s1 %s2 %s3", " method", "sooo", "goood");
// returns "this method sooo goood"

Wenn sich die variable Position in dieser Zeichenfolge ändert, wird dies auch von dieser Funktion unterstützt, ohne dass die Funktionsparameter geändert werden.

parameterizedString("i have %s2 %s1 and %s4 %s3.", "books", 5, "pencils", "6");
// returns "i have 5 books and 6 pencils."
1
fatihturgut
var user = "your name";
var s = 'hello ' + user + ', how are you doing';
1
Termi

Hier ist ein Mehrzeiliges String-Literal Beispiel in Node.js.

> let name = 'Fred'
> tm = `Dear ${name},
... This is to inform you, ${name}, that you are
... IN VIOLATION of Penal Code 64.302-4.
... Surrender yourself IMMEDIATELY!
... THIS MEANS YOU, ${name}!!!
...
... `
'Dear Fred,\nThis is to inform you, Fred, that you are\nIN VIOLATION of Penal Code 64.302-4.\nSurrender yourself IMMEDIATELY!\nTHIS MEANS YOU, Fred!!!\n\n'
console.log(tm)
Dear Fred,
This is to inform you, Fred, that you are
IN VIOLATION of Penal Code 64.302-4.
Surrender yourself IMMEDIATELY!
THIS MEANS YOU, Fred!!!


undefined
>