আমি জাভাস্ক্রিপ্ট স্ট্রিংয়ের ভিতরে ভেরিয়েবলগুলি কীভাবে রাখব? (Node.js)


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

অজগরেই আপনি এটি করেন। আপনি কীভাবে জাভাস্ক্রিপ্ট / নোড.জেএস এ এটি করতে পারেন?


1
আমি নিশ্চিত যে এখানে কোথাও কোনও এস-পরের স্ট্রোম্যান ছিলvar s = 'hello ${my_name}, how are you doing';
রায়নস

1
রায়নোস যেমন বলেছিলাম তেমন ব্যবহার করি: কনট কবিতা = "দ্য ব্ল্যাক রিভার"; কনস্ট লেখক = "জোসেফ ট্রল"; কনস্ট favePoem = `আমার প্রিয় কবিতা {{কবিতা} দ্বারা $ {লেখক} \।`; বা আপনি ব্যবহার করতে পারেন: কনসোল.লগ ('% s% d।', 'এগারোটি', 11);
গিলবার্তো বি। টেরা জুনিয়র

উত্তর:


56

আপনি যদি অনুরূপ কিছু পেতে চান তবে আপনি একটি ফাংশন তৈরি করতে পারেন:

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

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

ব্যবহার:

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

এটি কেবলমাত্র একটি সাধারণ উদাহরণ এবং বিভিন্ন ধরণের ডেটা টাইপ (যেমন %i, ইত্যাদি) বা এর থেকে বেরিয়ে আসার বিষয়টি আমলে নেয় না %s। তবে আমি আশা করি এটি আপনাকে কিছু ধারণা দেয়। আমি খুব নিশ্চিত যে এখানে লাইব্রেরি রয়েছে যা এই জাতীয় কোনও ফাংশন সরবরাহ করে।


1
এটি মূলত আপনি সেরা হবেন যেহেতু এটি অজগর হিসাবে এটি সরাসরি ভাষার দ্বারা সমর্থিত নয়।
জিম শুবার্ট

অপর উত্তর, এতে ইউজার.ফর্ম্যাট () উপস্থিত রয়েছে, এটি গ্রহণযোগ্য উত্তর হওয়া উচিত ... যদিও এটি ইএস 6 এর টেম্পলেট স্ট্রিংগুলির উল্লেখ করবে (যা 2011 সালে স্বীকৃত ছিল না)। পুরানো প্রশ্নগুলি আপডেট রাখতে আমাদের সত্যই উইকি-হাইজ্যাক করতে সক্ষম হওয়া উচিত। : \
কাইল বেকার

1
@ ফেলিক্সক্লিং, যেহেতু আপনি স্বীকৃত উত্তর, আপনি কী সঠিক উত্তরগুলি সঠিকভাবে প্রমাণ করার জন্য নিজের উত্তরটি আপডেট করতে পারবেন?
কাইল বেকার

1
এটি দুর্দান্ত, টেম্পলেট
আক্ষরিক

"যুক্তি" ব্যবহার করার সময় আমার একটি সমস্যা ছিল। একাধিক ক্লায়েন্ট পার্স থেকে পাস করার পরে, "স্ট্র" মিশ্রিত হয়েছিল। কোন ব্যাখ্যা?
tspentzas

405

নোড.জেএস এর সাহায্যে v4আপনি ইএস 6 এর টেম্পলেট স্ট্রিং ব্যবহার করতে পারেন

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

` পরিবর্তে আপনার ব্যাকটিকের মধ্যে স্ট্রিং মোড়ানো প্রয়োজন'


1
প্লাস 1 কারণ আমরা 2017 এ আছি এবং ES6 নোড ওয়ার্ল্ডে মূলত স্ট্যান্ডার্ড।
জাঙ্কাপঙ্ক্ট

1
এটি এখন (2017) সঠিক উত্তর। সচেতন থাকুন যে পুরানো ব্রাউজারগুলিকে সমর্থন করার জন্য আপনার টুলচেইনে আপনাকে বাবেল লাগবে।
সুপারলুমিনিয়ার

3
আমি নোড.জেএস বিকাশকারীদের পরামর্শ দিয়েছি যে নোডেজ.এস / ডটকম / রাইডলাইন html এর মতো পৃষ্ঠাগুলিতে এটি পরিষ্কার করা সত্যিই দরকারী হবে যে এটি ব্যাকটিক। এখানে এটির জন্য একটি সমস্যা ছিল: github.com/nodejs/docs/issues/55
গাইল ফোড

ব্যাকটিক্সের জন্য নিজেকে ফাঁদে ফেলতে হবে, মন্তব্যের জন্য ধন্যবাদ;)
ওভারড্রাইভার

3
আমার স্ট্রিংটি যদি কনফিগারেশন ফাইলের একটি অংশ হয় hello ${my_name}, how are you doingএবং আমি কনফিগারেশন থেকে স্ট্রিং পড়ার পরে পরিবর্তনশীল পরিবর্তন করতে চাই?
অমরেশ তায়াগি

49

আপনি যদি ES6 ব্যবহার করছেন তবে আপনার টেমপ্লেটের আক্ষরিক ব্যবহার করা উচিত।

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

এখানে আরও পড়ুন: https://developer.mozilla.org/en-US/docs/Web/JavaScript/References/Template_literals


1
এটি বর্তমানে একটি ভাল উত্তর।
ওয়েই-জে

43

node.js >4.0এটি ES6 স্ট্যান্ডার্ডের সাথে আরও সুসংগত হয়, যেখানে স্ট্রিং ম্যানিপুলেশনের ব্যাপক উন্নতি ঘটে ।

উত্তর মূল প্রশ্ন হিসাবে সহজ হিসাবে হতে পারে:

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

স্ট্রিংটি একাধিক লাইন ছড়িয়ে দিতে পারে, এটি টেমপ্লেট বা এইচটিএমএল / এক্সএমএল প্রসেসগুলি বেশ সহজ করে তোলে। এটি সম্পর্কে আরও বিশদ এবং আরও ক্যাপাবিলিটি: টেমপ্লেট লিটারালগুলি মোজিলা.আর.আরজে স্ট্রিং লিটারাল হয়।


3
"একক উদ্ধৃতির পরিবর্তে" কাত করুন "" আপনি দিনটি সংরক্ষণ করতে পারেন :)
মারিও বাইদার

40

util.format করে।

এটি v0.5.3 এর অংশ হবে এবং এটি ব্যবহার করা যেতে পারে:

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

3
সুন্দর, টিপটির জন্য ধন্যবাদ! কনসোল.লগ ('% s', মান) এরও কাজ করা উচিত।
আজাত

14

কর এটা:

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

হালনাগাদ

ES6 এর সাহায্যে আপনি এটিও করতে পারেন:

s = `hello ${my_name}, how are you doing`

"এটি সম্ভব নয়" বলতে কী বোঝ? : আপনি যদি ফর্ম্যাট পাঠ্য থাকতে চান তবে এটি ফেলিক্স ক্লিং দ্বারা উপরে বর্ণিত হিসাবে করতে পারেন। আমি এখানে যেমন দেখছি এটি সেরা উত্তর;) :)
মেরিয়ানোস নিকোস

@ টিমেক্স এটি একবার চেষ্টা করে দেখুন
দেব_খান

5

String.prototypeES2015 টেম্পলেট লিটারালগুলি প্রসারিত বা ব্যবহার করার কয়েকটি উপায় ।

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>



3

আপনি যদি নোড.জেএস ব্যবহার করছেন তবে কনসোল.লগ () প্রথম প্যারামিটার হিসাবে ফর্ম্যাট স্ট্রিং নেয়:

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

এটি একটি ভাল পয়েন্ট, তবে প্রশ্নটি স্ট্রিং ইন্টারপোলেশন সম্পর্কে। console.log()কেবল বিন্যাসিত স্ট্রিং এ আউটপুট দেয় STDOUT। অন্য কথায়, আপনি ফলাফলটি ব্যবহার করতে পারবেন নাcount: %d
জিম শোবার্ট

3

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

আমি একটি ফাংশন লিখেছিলাম যা সমস্যাটি সুনির্দিষ্টভাবে সমাধান করে।

প্রথম যুক্তি হ'ল স্ট্রিং যা প্যারামিটারাইজড হতে চেয়েছিল। "% S1,% s2, ...% s12" এই ফর্ম্যাটের মতো আপনার স্ট্রিংয়ে আপনার ভেরিয়েবলগুলি রাখা উচিত ।

অন্যান্য আর্গুমেন্টগুলি সেই স্ট্রিংয়ের যথাক্রমে পরামিতি।

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

উদাহরণ

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"

যদি সেই স্ট্রিংয়ে পরিবর্তনশীল অবস্থান পরিবর্তন হয় তবে ফাংশন পরামিতিগুলি পরিবর্তন না করে এই ফাংশনটি এটি সমর্থন করে।

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

2
var user = "your name";
var s = 'hello ' + user + ', how are you doing';

আমি এটি নিয়ে বেশ কয়েকটি সমস্যা দেখছি; কোড স্টুরিটিংয়ের সময় এটি স্ট্রিং ফর্ম্যাটিংয়ের চেয়ে কনকনটেইনেশন ব্যবহার করে যা আমার জন্য একটি লাল পতাকা, কারণ এটি পড়া এবং বজায় রাখা সাধারণত বেশি কঠিন। এছাড়াও আপনি সেই "প্যাটার্ন "টিকে পুনরুদ্ধার সিস্টেমে (কনফিগার ফাইল বা ডিবি এর মতো) নিরাপদে সংরক্ষণ করতে পারবেন না এবং পরে ব্যবহারকারীর মানটি ইনজেকশন করতে পারবেন না।
ররি ব্রাউন

1

নোড.জেএস -তে একটি মাল্টি-লাইন স্ট্রিং লিটারাল উদাহরণ এখানে is

> 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
>

এটিকে একটি টেম্পলেট স্ট্রিং বলা হয় এবং আপনি সম্ভবত এই বিদ্যমান উত্তরটিকে উপস্থাপন
বার্গি

এই "টেমপ্লেট স্ট্রিং" উদাহরণটি যে আমি একটি "টেম্পলেট স্ট্রিং" দেখিয়েছি যা একটি বহু-লাইনের স্ট্রিং লিটারাল ব্যবহার করে।
প্রেম এবং শান্তি - জো কোডসওয়েল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.