আমি কীভাবে একটি জাভাস্ক্রিপ্ট স্ট্রিংটিকে সাদা স্থান বা কমা দ্বারা বিভক্ত করতে পারি?


123

আমি যদি চেষ্টা করি

"my, tags are, in here".split(" ,")

আমি নিম্নলিখিত পেতে

[ 'my, tags are, in here' ]

আমি যেখানে চাই

['my', 'tags', 'are', 'in', 'here']

4
আপনি হোয়াইটস্পেস বা কমা মানে না ?
কাপ্তজনকোল্ড

1
ফলে আপনি পেয়ে থাকেন ব্যাখ্যা হিসেবে: "my, tags are, in here".split(" ,")স্ট্রিং শুধুমাত্র যেখানে একটি স্থান বিভক্ত হবে অনুসৃত একটি কমা দ্বারা বিভাজক হয়। আপনার স্ট্রিংটিতে সেই অনুক্রম নেই, সুতরাং এটি বিভক্ত নয়। "my, tags are, in here".split(", ")অদলবদলের ক্রমটি অদলবদল হওয়াতে প্রতিটি কমা ও স্থানের পরে কমপক্ষে আপনার মূল স্ট্রিংটি তিন ভাগে বিভক্ত হবে। আপনি যদি পাঁচটি অংশ চান তবে নীচের উত্তরগুলি ম্যাচ স্ট্রিংকে একটি স্পেস বা কমা মিলার নিয়মিত অভিব্যক্তি হিসাবে নির্দিষ্ট করে ।
জোখেম শুলেনক্লাপ্পার

উত্তর:


233

String.split একটি নিয়মিত প্রকাশটি গ্রহণ করতে পারে:

input.split(/[ ,]+/);

এই নির্দিষ্ট রেজেক্স এক বা একাধিক কমা বা স্পেসের ক্রমে বিভক্ত হয়, যাতে উদাহরণস্বরূপ একাধিক পরপর স্পেস বা কমা + স্পেস ক্রম ফলাফলগুলিতে খালি উপাদান তৈরি করে না।


22
কি হবে /,?\s+/?
বার্গি

4
@ বার্গি: ঠিক আছে, ওপি যা যা চেয়েছিল তার চেয়ে এটি আমার পরামর্শের চেয়ে কেবলমাত্র একমাত্র কমা অনুমোদিত (সামনে কেবল একটি কমা অনুমোদিত) এবং আরও আলগা (সমস্ত সাদা অংশে বিভক্ত) এটি কেবল আরও খারাপ হবে - ইনপুটটি বিবেচনা করুন spaces , before commas
জন

@ জোন: ঠিক আছে, এটি অপের প্রয়োজনীয়তার উপর নির্ভর করে। আমি প্লেন করব না :-)
বার্গি

11
+1 আমি জানি এটি সামান্য পুরানো তবে কেন ফাঁকা জায়গা ব্যবহার করবেন না \s। ব্লবটিতে আমার কিছুটা লাইন বিরতি হতে পারে এবং সেগুলিও \sযত্ন করে রাখে।

6
মুখোমুখি দ্রষ্টব্য: রেগেক্সের চারপাশে উদ্ধৃতি রাখবেন না। যেমন ব্যবহার করবেন না input.split("/[ ,]+/)"। ( input.split(//)পরিবর্তে input.split("//")) উদ্ধৃতিগুলি ছেড়ে দিন এবং আপনার আরও অনেক ভাল অভিজ্ঞতা হবে। কারণ অদ্ভুতভাবে, সম্ভবত এটি কেবল নিজের উপর কাজ করবে (উত্পন্ন করতে ["input.split(\"", ")\""])।
cod3monk3y

41

ব্যবহারের পরামর্শটি .split(/[ ,]+/)ভাল, তবে শীঘ্রই বা পরে প্রাকৃতিক বাক্যগুলি দিয়ে আপনি অ্যারেতে খালি উপাদান পেয়ে যাবেন। যেমন ['foo', '', 'bar']

এটি আপনার ব্যবহারের ক্ষেত্রে ঠিক আছে যদি তা ঠিক আছে। তবে আপনি যদি খালি উপাদানগুলি থেকে মুক্তি পেতে চান তবে আপনি এটি করতে পারেন:

var str = 'whatever your text is...';
str.split(/[ ,]+/).filter(Boolean);

6
নেটিভ অবজেক্ট ইনম্পিলিটিভ কন্সট্রাক্টরদের খুব চতুর ব্যবহারের কথা- আমার কম্পিউটারের কীবোর্ডটি আজ সকালে পাগল I'll আমি এই মন্তব্যটি পরে সম্পাদনা করব- তবে পয়েন্টটি বুলিয়ানকে অনুরোধ করছে যেমন 'বুলিয়ান ()' একটি নতুন অবজেক্টের সাথে বুলিয়ানকে নতুন করে তৈরি করবে মিথ্যাটির মান, ঠিক যেমন 'নতুন বুলিয়ান ()' কে আহ্বান জানায়। এটি এই ডিফল্ট আচরণের জন্য সমস্ত মিলকে ফিল্টার করে দেবে। খুব সুন্দর :)
ভিএলস্টবয়

"প্রাকৃতিক বাক্য" বলতে আপনার অর্থ কী? আমি এটি অনুকরণ করতে পারি না বা এটি করার কি তা আমি বুঝতে পারি না।
ক্রেগক্স

এটি @ ভোলস্টবয়ের দ্বারা ব্যাখ্যা করা হয়েছে। যখন Boolean()কনস্ট্রাক্টরকে কোনও মান হিসাবে ডাকা হয়, এটি সেই মানটিকে একটি বুলিয়ানকে কাস্ট করে - সত্য বা মিথ্যা। সুতরাং, যে কোনও মিথ্যা মানগুলি খালি স্ট্রিং সহ অ্যারে থেকে ফিল্টার করা হবে।
jonschlinkert

1
বিটিডব্লিউ, আপনি অন্যান্য অনুরূপ মজাদার জিনিসগুলির জন্য অন্তর্নিহিত কনস্ট্রাক্টরগুলি ব্যবহার করতে পারেন, যেমন[1, 2, 3].map(String)
jonschlinkert

2
"foo, bar,,foobar,".split(/[\s,]+/)প্রত্যাবর্তন ["foo", "bar", "foobar", ""](শেষ দিকে ঝাঁকুনি কমা কারণে), ধন্যবাদ!
রাফা সিলেক

37

যে কোনও দৈর্ঘ্যের সাদা স্থান ধরার জন্য আপনি রেজেেক্স ব্যবহার করতে পারেন এবং এটি এমন হবে:

var text = "hoi how     are          you";
var arr = text.split(/\s+/);

console.log(arr) // will result : ["hoi", "how", "are", "you"]

console.log(arr[2]) // will result : "are" 

ব্যবহার করার সময় শীর্ষস্থানীয় / পিছনের শ্বেত স্পেস থেকে সাবধান থাকুন /\s+/। উদাহরণস্বরূপ 'a b c '.split(/\s+/) === [ 'a', 'b', 'c', '' ],। আপনি যদি .trim()প্রথম স্ট্রিং করেন তবে আপনি ভাল হবেন।
জর্ডান ডডসন

12
"my, tags are, in here".split(/[ ,]+/)

ফলাফল হলো :

["my", "tags", "are", "in", "here"]

4

input.split(/\s*[\s,]\s*/)

\s*শূন্য বা ততোধিক সাদা স্থানের অক্ষরের সাথে মেলে (কেবল স্থানগুলি নয়, তবে ট্যাব এবং নিউলাইনগুলিও)।

... [\s,]একটি সাদা স্পেস অক্ষর বা একটি কমা সাথে মেলে

আপনি যদি ইনপুট থেকে ফাঁকা উপাদানগুলি এড়াতে চান তবে "foo,bar,,foobar"এটি কৌশলটি করবে:

input.split(/(\s*,?\s*)+/)

+এক বা পূর্ববর্তী অক্ষর বা গ্রুপ আরো মেলে।

সম্পাদনা:

?কমা পরে যোগ হয়েছে যা শূন্য বা একটি কমাতে মেলে।

সম্পাদনা 2:

সম্পাদনা 1 টি ভুল ছিল। ঠিক কর. কোনও মিল খুঁজে পেতে এখন কমপক্ষে একটি কমা বা একটি স্থান থাকতে হবে।


Nop। এটা ভালো না. এটি আউটপুট: ["আমার", "ট্যাগগুলি", "এখানে"]
গ্যাবিটিশিশ

এটি প্রতিটি চরিত্র বিভক্ত বলে মনে হচ্ছে।
মার্কো

@ মার্কো উফস আমি শেষ সম্পাদনা করার আগে সম্ভবত এটি পরীক্ষা করা উচিত ছিল। আমার এখন আছে, এবং এই সময় এটি সত্যই কাজ করা উচিত।
কাপ্তজনকোল্ড

হুম, গৃহীত উত্তরের চেয়ে এটি কীভাবে ভাল? পাশাপাশি "foo,bar,foobar".split(/[ ,]+/)ফিরে আসে ["foo", "bar", "foobar"]
রাফা সিয়ালাক

1
ক্যাপ্টজনকোল্ড ওহ, আমি এটি ধরিনি, উত্তর দেওয়ার জন্য ধন্যবাদ!
রাফা সিলেক

2

আমি যখন আপনার কমাগুলির মতো অতিরিক্ত অক্ষরগুলি আমলে নিতে চাই (আমার ক্ষেত্রে প্রতিটি টোকেন উদ্ধৃতি দিয়ে প্রবেশ করা যেতে পারে), তখন আমি অন্য স্ট্রিমিটরকে ফাঁকা জায়গায় পরিবর্তন করতে এবং তারপরে হোয়াইটস্পেসে বিভক্ত করার জন্য একটি স্ট্রিং.রেপস () করব।


1
str_variable.replace(/[,'"]+/gi, ' ').split(' ')
qräbnö
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.