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

Que es la manera de hacerlo en python. ¿Cómo se puede hacer que en javascript/node.js?

  • Estoy seguro de que no había un es-junto strawman en algún lugar para hacer var s = 'hello ${my_name}, how are you doing';
  • Yo uso como Raynos dijo: const poema = «El río negro»; const autor = «José Troll»; const favePoem = `Mi poema favorito es ${poema} por ${autor}\.`; O puede utilizar la consola.log(‘%s es %d.’, ‘Once’, 11);
InformationsquelleAutor TIMEX | 2011-10-17

13 Comentarios

  1. 41

    Si quieres tener algo similar, puede crear una función:

    function parse(str) {
        var args = [].slice.call(arguments, 1),
            i = 0;
    
        return str.replace(/%s/g, () => args[i++]);
    }

    Uso:

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

    Este es sólo un ejemplo sencillo y no toma en cuenta los diferentes tipos de tipos de datos (como %i, etc) o escapar de %s. Pero espero te da alguna idea. Estoy bastante seguro de que también hay bibliotecas de ahí que proporcionan una función como esta.

    • Eso es básicamente lo mejor que va a conseguir ya que no es soportado directamente por el idioma, ya que es en python.
    • La otra respuesta, que cuenta util.format(), debe ser aceptada la respuesta… aunque preferiblemente se podría también mencionar ES6 la plantilla de las cadenas (que por cierto no existe en 2011). Realmente debemos ser capaces de wiki-secuestrar viejas preguntas para mantenerlos actualizados. :\
    • Con suficiente rep puede editar las respuestas 😉
    • puesto que usted está aceptado respuesta, puede que acaba de actualizar su propia respuesta a señalar a los otros usos correctos?
    • Esto es bueno, la plantilla de los literales no son exactamente lo mismo
    • Tuve un problema durante el uso de «argumentos». Cuando varios clientes que se pasan desde el análisis, el «str» fue mezclado. Cualquier explicación?
    • No sé qué «Cuando varios clientes que se pasan desde el parse» se supone que significa eso.
    • es analizar ejecutan de forma sincrónica?
    • Sí. E incluso si no lo hizo, JavaScript nunca se ejecuta el código de simultáneamente (es decir, múltiples al mismo tiempo).

  2. 346

    Con Node.js v4 , puede utilizar ES6 del Plantilla de cadenas

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

    Usted necesita para envolver la cadena en el acento grave `
    en lugar de '

    • Esta debe ser la marcada respuesta, de la OMI.
    • Plus 1 Porque estamos en 2017 y ES6 es básicamente estándar en el nodo mundo.
    • Esto es ahora (2017) la respuesta correcta. Tenga en cuenta que usted necesitará Babel en su cadena de herramientas para el soporte de los navegadores más antiguos.
    • Yo he sugerido a la node.js los desarrolladores que sería muy útil para dejar claro en páginas como nodejs.org/api/readline.html que es un acento grave. No era un problema para ella aquí: github.com/nodejs/docs/issues/55
    • Cayó por comillas simples inclinadas trampa de mí mismo, gracias por el comentario 😉
    • ¿Qué pasa si mi cadena es una parte del archivo de configuración hello ${my_name}, how are you doing y quiero asignar variable dinámicamente después de la lectura de la cadena de config?
    • nota: no estoy usando comillas simples inclinadas, en el archivo de configuración de let cfgVal = "hello ${my_name}"; entonces se puede utilizar let newVal = cfgVal.replace("${my_name}", someVal); Aunque probablemente sería optar por un diferente marcador para indicar una configuración valor, de modo que no entren en conflicto w. ES6 cadenas de plantillas.
    • Tyagi utilizar esta función, a continuación, stackoverflow.com/a/56958015/5263696 😉

  3. 38

    util.formato hace esto.

    Será parte de v0.5.3 y puede ser utilizado como esta:

    var uri = util.format('http%s://%s%s', 
          (useSSL?'s':''), apiBase, path||'/');
    • Bonito, gracias por el tip! la consola.log(‘%s’, valor) también debería funcionar.
  4. 36

    Como de node.js >4.0 es más compatible con ES6 estándar, donde la manipulación de cadenas mejorado mucho.

    La respuesta a la pregunta original puede ser tan simple como:

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

    Donde la cadena se puede propagar varias líneas, se hace o plantillas HTML/XML procesos muy fácil. Más detalles y más capabilitie al respecto: Plantilla literales literales de cadena en mozilla.org.

    • «tilt» en lugar de comilla simple ‘» guardar el día de mayo 🙂
    • ya hay una respuesta como la siguiente :thinking_face:
  5. 11

    Hacer que

    s = 'hello ' + my_name + ', how are you doing'
    • ¿Qué quiere decir «no se puede» ? 😕 Si te gusta tener formato de texto que usted puede hacer como se describe más arriba por Felix Kling. Esta es la mejor respuesta ya que veo aquí 😉 🙂
    • Es posible que simplemente intentarlo.
  6. 4

    Un par de maneras de extender String.prototype, o el uso ES2015 plantilla de literales.

    JS:

    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]}`;

    HTML:

    <pre id="result"></pre>

  7. 3

    JS:

    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)

  8. 2

    Si usted está utilizando node.js, la consola.log() toma el formato de cadena como primer parámetro:

     console.log('count: %d', count);
    • Este es un buen punto, pero la pregunta es acerca de la interpolación de cadenas. console.log() sólo salidas de la cadena con formato para STDOUT. En otras palabras, usted no puede utilizar el resultado de count: %d
    • var result = util.format('count: %d', count);
  9. 1

    Escribí un la función que resuelve el problema precisamente.

    Primer argumento es la cadena que quería ser parametrizada. Usted debe poner las variables en esta cadena como este formato «%s1 %s2, … %s12».

    Otros argumentos son los parámetros, respectivamente, para que la cadena.

    /***
     * @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];
      });
    }

    Ejemplos

    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"

    Si la variable de cambios de posición en la cadena, esta función admite también sin cambiar los parámetros de la función.

    parameterizedString("i have %s2 %s1 and %s4 %s3.", "books", 5, "pencils", "6");
    //returns "i have 5 books and 6 pencils."
  10. 0

    Aquí es un Multi-línea de Cadena Literal ejemplo en 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
    >
    • Se llama de la plantilla de la cadena de, y es posible que desee simplemente upvote esta respuesta existente
    • Esta «cadena de plantilla de» ejemplo que he mostrado ES una «cadena de plantilla» que utiliza un Multi-línea de un Literal de Cadena.

Dejar respuesta

Please enter your comment!
Please enter your name here