শুধুমাত্র নির্দিষ্ট অক্ষরের প্রথম উদাহরণে বিভক্ত স্ট্রিং


271

আমার কোডে আমি ভিত্তিতে একটি স্ট্রিং বিভক্ত করেছি _এবং অ্যারেতে দ্বিতীয় আইটেমটি দখল করব।

var element = $(this).attr('class');
var field = element.split('_')[1];

good_luckআমাকে নিয়ে যায় এবং সরবরাহ করে luck। দুর্দান্ত কাজ!

তবে, এখন আমার মতো ক্লাস রয়েছে যা দেখে মনে হচ্ছে good_luck_buddy। দ্বিতীয়টি উপেক্ষা করে _আমাকে দেওয়ার জন্য আমি কীভাবে আমার জাভাস্ক্রিপ্ট পেতে পারি luck_buddy?

আমি এটি var field = element.split(new char [] {'_'}, 2);এসি # স্ট্যাকওভারফ্লো উত্তরে খুঁজে পেয়েছি তবে এটি কার্যকর হয় না। আমি jsFizz এ চেষ্টা করেছিলাম ...

উত্তর:


406

ক্যাপচারিং বন্ধনী ব্যবহার করুন :

"good_luck_buddy".split(/_(.+)/)[1]
"luck_buddy"

তারা হিসাবে সংজ্ঞায়িত করা হয়

যদি separatorক্যাপচারিং বন্ধনী রয়েছে তবে ম্যাচের ফলাফলগুলি অ্যারেতে ফিরে আসবে।

সুতরাং এই ক্ষেত্রে আমরা বিভক্ত করতে চাই _.+(অর্থাত্ স্প্লিট বিভাজক একটি সাব স্ট্রিং হিসাবে শুরু হচ্ছে _) তবে ফলাফলটি আমাদের বিভাজকের কিছু অংশ (অর্থাৎ সমস্ত কিছু পরে _) রাখুক ।

এই উদাহরণে আমাদের বিভাজক (ম্যাচিং _(.+)) _luck_buddyএবং ক্যাপচার গ্রুপটি (বিভাজকের মধ্যে) lucky_buddy। ক্যাপচারিং প্রথম বন্ধনী ছাড়া luck_buddy(ম্যাচিং .+) ফলাফল অ্যারে অন্তর্ভুক্ত করা হবে না কারণ এটি সরল ক্ষেত্রে ক্ষেত্রে splitপৃথককারীদের ফলাফল অন্তর্ভুক্ত করা হয় না।


21
আপনার এমনকি (?) দরকার নেই, কেবল প্রথম_-এর পরে আরও 1 টি অক্ষর ক্যাপচার করতে কেবল__(.+)/ ব্যবহার করুন
চিহ্নিত করুন

3
খুবই ভদ্র. একটি যাদুমন্ত্র মত কাজ করে. ধন্যবাদ.
অফারগাল

12
কেবল স্পষ্ট করে বলতে গেলে, এই সমাধানটির কাজ করার কারণটি হ'ল প্রথমটির পরে সমস্ত কিছু _ক্যাপচারিং গ্রুপের সাথে মিলে যায় এবং সেই কারণেই টোকেন তালিকায় যুক্ত হয়।
অ্যালান মুর

28
আমি "Aspect Ratio: 16:9".split(/:(.+)/)["Aspect Ratio", " 16:9", ""]
এগুলি

4
@katylavallee - এই শক্তি সহায়তা: stackoverflow.com/questions/12836062/... যেহেতু বিভাজক হয় ": 16:9", সেখানে বিভাজক পর কিছুই, এইভাবে শেষে খালি স্ট্রিং তৈরি হয়।
ডেরেক 朕 會 功夫

230

আপনার কিসের জন্য নিয়মিত এক্সপ্রেশন এবং অ্যারে দরকার?

myString = myString.substring(myString.indexOf('_')+1)

var myString= "hello_there_how_are_you"
myString = myString.substring(myString.indexOf('_')+1)
console.log(myString)


5
স্ট্রিং! == স্ট্রিং। জাভাস্ক্রিপ্ট কেস সংবেদনশীল।
কেনেবেক

3
আমি মনে করি এটি সেরা উত্তর। _লিখে দ্বিতীয় দ্বারা স্ট্রিং myString.substring( myString.indexOf('_', myString().indexOf('_') + 1) + 1 )
পাওয়াও

9
উত্তরটি স্ট্রিংয়ের দ্বিতীয় অংশকে আউটপুট করে। আপনি যদি প্রথম অংশটিও চান? সঙ্গে var str = "good_luck_buddy", res = str.split(/_(.+)/);সব অংশের পাবেন:console.log(res[0]); console.log(res[1]);
সূর্যের

1
@ পিটারলিজারকে বিভক্ত করা যাক = [ string.substring(0, string.indexOf(options.divider)), string.substring(string.indexOf(options.divider) + 1) ]আপনার কাছে এটি আছে। পরিবর্তনশীল সুচ সমর্থন সহ
স্টিফান

এই জিনিয়াস!
stuckedoverflow

36

আমি সব খরচেই রেজিপ্সে এড়িয়ে চলি। আপনি করতে পারেন এমন আরও একটি জিনিস এখানে:

"good_luck_buddy".split('_').slice(1).join('_')

18
যে রেজিএক্সপকে ভয় পায় তাকে কখনই বলা যায় না যে রেজিএক্সপ কত দুর্দান্ত। আপনার নিজের দরজাটি খুঁজে বের করতে হবে। একবার আপনি সেখানে গেলে আপনি আর পিছনে ফিরে তাকাবেন না। কয়েক বছরের মধ্যে আমাকে আবার জিজ্ঞাসা করুন এবং আপনি আমাকে বলবেন যে এটি কত দুর্দান্ত।
ক্রিশ্চিয়ান ওয়েস্টারবিয়ক

3
@ ইউনাস লাল বড়ি নিন!
frnhr

2
@ ইউনাস হ্যাঁ, লাল বড়ি নিন! এটি আপনার জীবনকে দ্রুততর করে তুলবে এমনকি ছোট ছোট স্ট্রিংয়ের জন্যও
জুলিয়ান এফ ওয়েইনার্ট

15
হা! আমি এই মন্তব্যটি 4+ বছর আগে লিখেছি। আমি এখন RegExp সঙ্গে অবশ্যই বোর্ডে আছি! :)
যোনাস

2
ইউনাস আপনি আরও ভাল না। রেজিএক্সপ্স যখন আপনার প্রয়োজন হয় তখন দুর্দান্ত । এখানে মামলা হয় না। আপডেট পরীক্ষাটি পরীক্ষা করুন: jsperf.com/split-by-first-colon/2
এটেল

11

প্রথম দৃষ্টান্তটি একটি অনন্য স্থানধারকের সাথে প্রতিস্থাপন করুন তারপরে সেখান থেকে বিভক্ত করুন।

"good_luck_buddy".replace(/\_/,'&').split('&')

["good","luck_buddy"]

বিভক্ত উভয় পক্ষের প্রয়োজন হলে এটি আরও কার্যকর।


2
এটি স্ট্রিংয়ে একটি অপ্রয়োজনীয় সীমাবদ্ধতা রাখে।
ইয়ান ফটো

এই উত্তরটি আমার পক্ষে কাজ করেছিল যখন উপরের উত্তরগুলি সমস্ত উত্তর দেয় না।
গিটার ভাইকিং

1
@ ইয়ানফোটো '&' ব্যবহার করে বোঝাতে চাইছেন? এটা কিছু হতে পারে।
সেবজওয়ালেস

2
@ সেবজওয়াল্লেস আপনি যা কিছু চয়ন করুন তার অর্থ আপনি স্ট্রিংতে সেই অক্ষরটি রাখতে পারবেন না। উদাহরণস্বরূপ "ফিশ এবং চিপস_রে_ গ্রেট" দেয় [ফিশ, চিপস, গ্রেট গ্রেট] আমি মনে করি
জো

@ জো আপনি '&' এর পরিবর্তে যে কোনও কিছু ব্যবহার করতে পারেন - এটি কেবল উদাহরণ। আপনি চাইলে আপনি _ এর প্রথম ঘটনাটি প্রতিস্থাপন করতে পারেন। সুতরাং "ফিশ অ্যান্ড চিপস_রে_গ্রেট" _ এর সাথে "ফিশ ও চিপস_রেট" দেওয়ার পরে then এর প্রথম ঘটনাটি প্রতিস্থাপন করে তারপরে ["ফিশ অ্যান্ড চিপস", "আইআর গ্রেট"]
সেবজলেস

8

আপনি নিয়মিত প্রকাশটি এর মতো ব্যবহার করতে পারেন:

var arr = element.split(/_(.*)/)
আপনি দ্বিতীয় প্যারামিটারটি ব্যবহার করতে পারেন যা বিভাজনের সীমা নির্দিষ্ট করে। ie: var ক্ষেত্র = উপাদান.স্প্লিট ('_', 1) [1];

6
এটি কেবলমাত্র কতগুলি বিভক্ত আইটেম ফিরে আসে তা নির্দিষ্ট করে না, এটি কতবার বিভক্ত হয়। 'good_luck_buddy'.split('_', 1);ঠিক ফিরে আসে['good']
অ্যালেক্স ভিডাল

ধন্যবাদ এটি একটি অনুমান করা হয়েছে। একটি নিয়মিত অভিব্যক্তি ব্যবহার করতে পোস্ট আপডেট করেছেন।
চান্দু

(:?.*)একটি নন-ক্যাপচারিং গ্রুপ হওয়ার কথা ছিল ? যদি তা হয় (?:.*)তবে তা হওয়া উচিত , তবে আপনি যদি এটি সংশোধন করেন তবে আপনি দেখতে পাবেন যে এটি আর কাজ করে না। শূন্য বা আরও যে কোনও চরিত্রের পরে (:?.*)একটি al :চ্ছিক মিল রয়েছে । এই সমাধানটি একই কারণেই শেষ হয় @ মার্কএফ এর কাজগুলিতে: প্রথমটির পরে সমস্ত কিছু _টোকেন তালিকায় যুক্ত করা হয় কারণ এটি ক্যাপচারিং গ্রুপে মিলেছিল। (এছাড়াও, gএকটি স্প্লিট রেজেক্সে ব্যবহৃত হলে সংশোধকটির কোনও প্রভাব নেই))
অ্যালান মুর

ধন্যবাদ, বুঝতে পারিনি। রেজেক্স আপডেট করেছে এবং বেশ কয়েকটি দৃশ্যের উপর এটি চেষ্টা করেছে ...
চান্ডু

1
এটি IE8 তে কাজ করে না এবং আমি আবার সূচিপত্রে এবং সাবস্ট্রিংয়ে ফিরে যাই
ইগোর আলেকসিভ

5

আজকাল String.prototype.splitসত্যই আপনাকে বিভাজনের সংখ্যা সীমাবদ্ধ করতে দেয়।

str.split([separator[, limit]])

...

সীমা ptionচ্ছিক

বিভাজনের সংখ্যা সীমাবদ্ধ একটি অ-নেতিবাচক পূর্ণসংখ্যা। যদি সরবরাহ করা থাকে তবে নির্দিষ্ট বিভাজকের প্রতিটি ঘটনায় স্ট্রিং বিভক্ত হয়, কিন্তু সীমাতে এন্ট্রি অ্যারেতে স্থাপন করা বন্ধ হয়ে যায়। কোনও বাকী পাঠ্য বিন্যাসে মোটেই অন্তর্ভুক্ত নয়।

অ্যারেটিতে সীমাটির চেয়ে কম এন্ট্রি থাকতে পারে যদি সীমাটি পৌঁছানোর আগে স্ট্রিংয়ের শেষ হয়। যদি সীমা 0 হয়, কোনও বিভাজন সম্পন্ন হয় না।

বিচারকার্য স্থগিত রাখার আদেশ

এটি আপনার প্রত্যাশা মতো কাজ করতে পারে না। আমি আশা করছিলাম যে এটি কেবলমাত্র বাকি সীমান্তকারীদের উপেক্ষা করবে, তবে পরিবর্তে, যখন এটি সীমাতে পৌঁছে যায়, এটি পুনরায় ফলাফলগুলি থেকে বিভাজনের পরে অংশটি বাদ দিয়ে আবার অবশিষ্ট স্ট্রিংটি বিভক্ত করে তোলে।

let str = 'A_B_C_D_E'
const limit_2 = str.split('_', 2)
limit_2
(2) ["A", "B"]
const limit_3 = str.split('_', 3)
limit_3
(3) ["A", "B", "C"]

আমি আশা করছিলাম:

let str = 'A_B_C_D_E'
const limit_2 = str.split('_', 2)
limit_2
(2) ["A", "B_C_D_E"]
const limit_3 = str.split('_', 3)
limit_3
(3) ["A", "B", "C_D_E"]


একই অবস্থা. দেখে মনে হচ্ছে পিএইচপি "প্রথম" এবং "বিশ্রাম" এ বিভক্ত।
কলাঅ্যাসিড

5

এই সমাধানটি আমার পক্ষে কাজ করেছিল

var str = "good_luck_buddy";
var index = str.indexOf('_');
var arr = [str.slice(0, index), str.slice(index + 1)];

//arr[0] = "good"
//arr[1] = "luck_buddy"

অথবা

var str = "good_luck_buddy";
var index = str.indexOf('_');
var [first, second] = [str.slice(0, index), str.slice(index + 1)];

//first = "good"
//second = "luck_buddy"

স্প্লিটটারে 1 টির বেশি অক্ষর থাকলে এটি কাজ করে না।
হাইকমাম

4

String.splitদুর্ভাগ্যক্রমে জাভাস্ক্রিপ্টের বিভাজনের প্রকৃত সংখ্যা সীমিত করার কোনও উপায় নেই। এটির একটি দ্বিতীয় যুক্তি রয়েছে যা প্রকৃত বিভক্ত আইটেমগুলির মধ্যে কতটি ফিরিয়ে দেয় তা নির্দিষ্ট করে, যা আপনার ক্ষেত্রে কার্যকর নয়। সমাধানটি হ'ল স্ট্রিংটি বিভক্ত করা, প্রথম আইটেমটি সরিয়ে ফেলুন, তারপরে অবশিষ্ট আইটেমগুলিতে পুনরায় যোগদান করুন ::

var element = $(this).attr('class');
var parts = element.split('_');

parts.shift(); // removes the first item from the array
var field = parts.join('_');

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

1
আকর্ষণীয়, এই সমাধানটি আরও পঠনযোগ্য / পরিচালনাযোগ্য সমাধানের জন্য সমস্যাটি নিঃশেষিত করে। আমার সম্পূর্ণ নামটিকে প্রথম এবং শেষের দিকে রূপান্তর করার ক্ষেত্রে (হ্যাঁ আমাদের প্রয়োজনীয়তাগুলি এই যুক্তিটিকে বাধ্য করেছিল) এই সমাধানটি সবচেয়ে ভাল কাজ করেছে এবং অন্যদের থেকে আরও পঠনযোগ্য। ধন্যবাদ
সুকিমা

এটি আর সত্য নয় :)
ক্রাকেন

3

আমার স্ট্রিংয়ের দুটি অংশ প্রয়োজন, সুতরাং, রেজেেক্স লুকাইহেন্ড আমাকে এটির জন্য সহায়তা করুন।

const full_name = 'Maria do Bairro';
const [first_name, last_name] = full_name.split(/(?<=^[^ ]+) /);
console.log(first_name);
console.log(last_name);


3

ডেস্ট্রাকচারিং অ্যাসাইনমেন্টের সাহায্যে এটি আরও পাঠযোগ্য হতে পারে:

let [first, ...rest] = "good_luck_buddy".split('_')
rest = rest.join('_')

2

দ্রুততম সমাধান?

আমি কয়েকটি মানদণ্ড চালিয়েছি এবং এই সমাধানটি বিশালভাবে জিতেছে: 1

str.slice(str.indexOf(delim) + delim.length)

// as function
function gobbleStart(str, delim) {
    return str.slice(str.indexOf(delim) + delim.length);
}

// as polyfill
String.prototype.gobbleStart = function(delim) {
    return this.slice(this.indexOf(delim) + delim.length);
};

অন্যান্য সমাধানগুলির সাথে পারফরম্যান্স তুলনা

কেবলমাত্র ঘনিষ্ঠ প্রতিযোগীর substrপরিবর্তে ব্যবহার না করে একই কোডের লাইন ছিল slice

অন্যান্য সমাধানগুলিতে আমি জড়িত থাকার চেষ্টা করেছি splitবা RegExpএর একটি বড় পারফরম্যান্স হিট নিয়েছি এবং প্রায় 2 অর্ডার অফ ডিগ্রি ছিল । অবশ্যই joinএর ফলাফল ব্যবহার করে splitএকটি অতিরিক্ত পারফরম্যান্স জরিমানা যুক্ত করা হয়।

তারা ধীর কেন? যে কোনও সময় কোনও নতুন অবজেক্ট বা অ্যারে তৈরি করতে গেলে, জেএসকে ওএস থেকে মেমরির একটি অংশের জন্য অনুরোধ করতে হবে। এই প্রক্রিয়াটি খুব ধীর।

আপনি মানদণ্ডগুলি অনুসরণ করছেন এমন ক্ষেত্রে এখানে কিছু সাধারণ নির্দেশিকা দেওয়া হল:

  • অবজেক্টস {}বা অ্যারেগুলির জন্য নতুন গতিশীল মেমরি বরাদ্দ [](যেমনটি splitতৈরি করে) এর পারফরম্যান্সে অনেক ব্যয় হবে।
  • RegExp অনুসন্ধানগুলি আরও জটিল এবং স্ট্রিং অনুসন্ধানগুলির চেয়ে ধীর।
  • আপনার যদি ইতিমধ্যে একটি অ্যারে থাকে তবে ডিস্ট্রাকচারিং অ্যারেগুলি স্পষ্টভাবে সূচিকাগুলির তুলনায় তত দ্রুত এবং দুর্দান্ত দেখায়।

প্রথম উদাহরণ ছাড়িয়ে অপসারণ করা

এখানে এমন একটি সমাধান রয়েছে যা নবম উদাহরণ সহ স্লাইস হয়ে যাবে। এটি ততটা দ্রুত নয়, তবে ওপির প্রশ্নে gobble(element, '_', 1)এখনও একটি RegExpবা splitসমাধানের চেয়ে 2x দ্রুত এবং আরও কিছু করতে পারে:

/*
`gobble`, given a positive, non-zero `limit`, deletes
characters from the beginning of `haystack` until `needle` has
been encountered and deleted `limit` times or no more instances
of `needle` exist; then it returns what remains. If `limit` is
zero or negative, delete from the beginning only until `-(limit)`
occurrences or less of `needle` remain.
*/
function gobble(haystack, needle, limit = 0) {
  let remain = limit;
  if (limit <= 0) { // set remain to count of delim - num to leave
    let i = 0;
    while (i < haystack.length) {
      const found = haystack.indexOf(needle, i);
      if (found === -1) {
        break;
      }
      remain++;
      i = found + needle.length;
    }
  }

  let i = 0;
  while (remain > 0) {
    const found = haystack.indexOf(needle, i);
    if (found === -1) {
      break;
    }
    remain--;
    i = found + needle.length;
  }
  return haystack.slice(i);
}

উপরের সংজ্ঞাটি gobble('path/to/file.txt', '/')দিয়ে ফাইলটির নাম gobble('prefix_category_item', '_', 1)দেবে এবং এই উত্তরের প্রথম সমাধানের মতো উপসর্গটি সরিয়ে ফেলবে।


  1. MacOSX 10.14 এ ক্রোম 70.0.3538.110 এ পরীক্ষা করা হয়েছিল T

আসুন ... এটি 2019 ... আসলেই কি লোকেরা এখনও এই জাতীয় জিনিসটিকে মাইক্রোব্যাঙ্কমার্ক করছে?
ভিক্টর শ্রড্ডার

আমি রাজী. যদিও মাইক্রোবেঞ্চমার্কিং কিছুটা আকর্ষণীয়, আপনার অপটিমাইজেশনের জন্য কোনও সংকলক বা অনুবাদকের উপর নির্ভর করা উচিত W কে জানে। এমবি এটি পড়ার জন্য যে কেউ একটি সংকলক তৈরি করছে বা ইজেএস / এমবেডেড ব্যবহার করছে এবং রেজেেক্স ব্যবহার করতে পারে না। যাইহোক, এটি আমার নির্দিষ্ট কেসটির জন্য একটি রেজেক্সের চেয়ে ভাল লাগছে। (আমি "দ্রুততম সমাধান" সরিয়ে
ফেললাম

1

মার্ক এফ এর সমাধানটি দুর্দান্ত but তবে এটি পুরানো ব্রাউজারগুলির দ্বারা সমর্থিত নয়। কেনেবেকের সমাধানটি দুর্দান্ত এবং পুরানো ব্রাউজারগুলির দ্বারা সমর্থিত তবে রেজেক্সকে সমর্থন করে না।

সুতরাং, আপনি যদি এমন কোনও সমাধান খুঁজছেন যা কেবল একবারে আপনার স্ট্রিংকে বিভক্ত করে তোলে, এটি পুরানো ব্রাউজারগুলি দ্বারা সমর্থিত এবং রেজেক্সকে সমর্থন করে, আমার সমাধানটি এখানে:

String.prototype.splitOnce = function(regex)
{
    var match = this.match(regex);
    if(match)
    {
        var match_i = this.indexOf(match[0]);
        
        return [this.substring(0, match_i),
        this.substring(match_i + match[0].length)];
    }
    else
    { return [this, ""]; }
}

var str = "something/////another thing///again";

alert(str.splitOnce(/\/+/)[1]);


1

আমার মতো শিক্ষানবিশদের জন্য যারা নিয়মিত প্রকাশের জন্য অভ্যস্ত নন, এই কার্যক্ষম সমাধানটি কাজ করেছে:

   var field = "Good_Luck_Buddy";
   var newString = field.slice( field.indexOf("_")+1 );

স্লাইস () পদ্ধতিটি একটি স্ট্রিংয়ের একটি অংশ বের করে এবং একটি নতুন স্ট্রিং দেয় এবং সূচিপত্র () পদ্ধতিটি স্ট্রিংয়ে একটি নির্দিষ্ট মানটির প্রথম পাওয়া সংঘর্ষের অবস্থান প্রদান করে।


এটি কোনও কর্মপরিকল্পনা নয়, তবে এটি করার একটি সঠিক উপায়;)
ভিক্টর শ্রড্ডার

1

replace()একটি রেজেক্স সহ স্ট্রিং পদ্ধতিটি ব্যবহার করুন :

var result = "good_luck_buddy".replace(/.*?_/, "");
console.log(result);

এই রেজেক্স প্রথম _এবং তার আগে 0 বা তার বেশি অক্ষরের সাথে মেলে _। ম্যাচটি তারপরে খালি স্ট্রিং দ্বারা প্রতিস্থাপিত হয়।


এখানে document.body.innerHTMLঅংশটি সম্পূর্ণ অকেজো।
ভিক্টর শ্রড্ডার

@ ভিক্টরশ্রেডার আপনি কীভাবে স্নিপেটের আউটপুটটি দেখতে পাবে document.body.innerHTML?
জেমস টি

1
document.bodyউপস্থিত থাকার জন্য ডোম নির্ভর করে এবং এটি খাঁটি জাভাস্ক্রিপ্ট পরিবেশে কাজ করবে না। console.logএই উদ্দেশ্যে যথেষ্ট বা পরিদর্শন জন্য একটি পরিবর্তনশীল ফলাফল কেবল ছেড়ে।
ভিক্টর শ্রড্ডার

@ ভিক্টরশ্রেডার আমি মনে করি না যে এটি এত বিভ্রান্তি সৃষ্টি করেছিল, তবে আমি সম্পাদনা করেছি।
জেমস টি

0

এটি আমার জন্য ক্রোম + এফএফ এ কাজ করেছে:

"foo=bar=beer".split(/^[^=]+=/)[1] // "bar=beer"
"foo==".split(/^[^=]+=/)[1] // "="
"foo=".split(/^[^=]+=/)[1] // ""
"foo".split(/^[^=]+=/)[1] // undefined

আপনার যদি কীটিও প্রয়োজন হয় তবে এটি ব্যবহার করে দেখুন:

"foo=bar=beer".split(/^([^=]+)=/) // Array [ "", "foo", "bar=beer" ]
"foo==".split(/^([^=]+)=/) // [ "", "foo", "=" ]
"foo=".split(/^([^=]+)=/) // [ "", "foo", "" ]
"foo".split(/^([^=]+)=/) // [ "foo" ]

//[0] = ignored (holds the string when there's no =, empty otherwise)
//[1] = hold the key (if any)
//[2] = hold the value (if any)

0

এখানে একটি রেজিপ এক্সপ্রেস যা কৌশলটি করে।

'good_luck_buddy' . split(/^.*?_/)[1] 

প্রথমে এটি ম্যাচটি শুরু থেকে '^' দিয়ে শুরু করতে বাধ্য করে। তারপরে এটি এমন কোনও অক্ষরের সাথে মেলে যা '_' নয়, অন্য কথায় প্রথম '_' এর আগে সমস্ত অক্ষর রয়েছে।

দ্য '?' মানে পুরো প্যাটার্নটি ম্যাচ তৈরি করে এমন একটি ন্যূনতম সংখ্যার সাথে মিল রয়েছে '। *?' কারণ এটি '_' দ্বারা অনুসরণ করা হয়, যা এর পরে ম্যাচে এটির শেষ চরিত্র হিসাবে অন্তর্ভুক্ত হয়।

অতএব এই বিভাজন () এর 'স্প্লিটার' হিসাবে এর মতো মিলে যাওয়া অংশটি ব্যবহার করে এবং ফলাফল থেকে সরিয়ে দেয়। সুতরাং এটি প্রথম '_' পর্যন্ত সমস্ত কিছু সরিয়ে দেয় এবং আপনাকে ফলাফলের দ্বিতীয় উপাদান হিসাবে বিশ্রাম দেয়। প্রথম উপাদানটি ম্যাচের অংশের আগে অংশটি উপস্থাপন করে। এটি "" কারণ ম্যাচটি শুরু থেকেই শুরু হয়।

অন্যান্য RegExps রয়েছে যা পূর্ববর্তী উত্তরে চান্ডুর দেওয়া /_(.*)/ এর মতো কাজ করে।

/^.*?

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