How do I put variables inside javascript strings?

前端 未结 13 1091
感动是毒
感动是毒 2020-12-12 15:12
s = \'hello %s, how are you doing\' % (my_name)

That\'s how you do it in python. How can you do that in javascript/node.js?

相关标签:
13条回答
  • 2020-12-12 15:46

    if you are using ES6, the you should use the Template literals.

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

    read more here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

    0 讨论(0)
  • 2020-12-12 15:49

    Note, from 2015 onwards, just use backticks for templating

    https://stackoverflow.com/a/37245773/294884

    let a = `hello ${name}`    // NOTE!!!!!!!! ` not ' or "
    

    Note that it is a backtick, not a quote.


    If you want to have something similar, you could create a function:

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

    Usage:

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

    This is only a simple example and does not take into account different kinds of data types (like %i, etc) or escaping of %s. But I hope it gives you some idea. I'm pretty sure there are also libraries out there which provide a function like this.

    0 讨论(0)
  • 2020-12-12 15:50

    I wrote a function which solves the problem precisely.

    First argument is the string that wanted to be parameterized. You should put your variables in this string like this format "%s1, %s2, ... %s12".

    Other arguments are the parameters respectively for that string.

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

    Examples

    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"
    

    If variable position changes in that string, this function supports it too without changing the function parameters.

    parameterizedString("i have %s2 %s1 and %s4 %s3.", "books", 5, "pencils", "6");
    // returns "i have 5 books and 6 pencils."
    
    0 讨论(0)
  • 2020-12-12 15:53

    Do that:

    s = 'hello ' + my_name + ', how are you doing'
    

    Update

    With ES6, you could also do this:

    s = `hello ${my_name}, how are you doing`
    
    0 讨论(0)
  • 2020-12-12 15:54

    util.format does this.

    It will be part of v0.5.3 and can be used like this:

    var uri = util.format('http%s://%s%s', 
          (useSSL?'s':''), apiBase, path||'/');
    
    0 讨论(0)
  • 2020-12-12 15:55

    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)

    0 讨论(0)
提交回复
热议问题