প্রথম সাদা স্থানের ঘটনার উপর স্ট্রিট বিভক্ত করুন


150

আমি এমন কোনও অনুকূলিত রেজেক্স পাইনি যা আমাকে প্রথম সাদা স্থানের ইভেন্টে স্ট্রিং বেস করে বিভক্ত করে:

var str="72 tocirah sneab";

আমার দরকার:

[
    "72",
    "tocirah sneab",
]

1
"অপ্টিমাইজড" বলতে কী বোঝ? এটা আছে আছে একটি Regex হতে?
ডিস্টান

দয়া করে @ জর্জের উত্তরে স্ক্রোল করার জন্য সময় নিন - সুন্দর স্ট্যাকওভারফ্লো.com
সঞ্জয় মনোহর

উত্তর:


324

আপনি যদি কেবলমাত্র স্পেস ক্যারেক্টার (এবং ট্যাব বা অন্যান্য সাদা স্থানের অক্ষরগুলি না নিয়ে) যত্নশীল হন এবং প্রথম স্থানের আগে এবং প্রথম স্থানের পরে সমস্ত কিছুর বিষয়ে যত্নশীল হন, আপনি এটির মতো নিয়মিত প্রকাশ ছাড়াই এটি করতে পারেন:

str.substr(0,str.indexOf(' ')); // "72"
str.substr(str.indexOf(' ')+1); // "tocirah sneab"

মনে রাখবেন যে যদি কোনও স্থান না থাকে তবে প্রথম লাইনটি একটি খালি স্ট্রিং প্রদান করবে এবং দ্বিতীয় লাইনটি পুরো স্ট্রিংটি ফেরত দেবে। নিশ্চিত হন যে সেই পরিস্থিতিতে আপনি যে আচরণটি চান তা (বা সেই পরিস্থিতি উত্থাপিত হবে না)।


50

জাভাস্ক্রিপ্ট লুকবাইন্ডগুলি সমর্থন করে না, সুতরাং splitএটি সম্ভব নয়। matchকাজ করে:

str.match(/^(\S+)\s(.*)/).slice(1)

আরেকটি কৌশল:

str.replace(/\s+/, '\x01').split('\x01')

কেমন:

[str.replace(/\s.*/, ''), str.replace(/\S+\s/, '')]

এবং কেন না

reverse = function (s) { return s.split('').reverse().join('') }
reverse(str).split(/\s(?=\S+$)/).reverse().map(reverse)

অথবা হতে পারে

re = /^\S+\s|.*/g;
[].concat.call(re.exec(str), re.exec(str))

2019 আপডেট : ES2018 হিসাবে, লুকহাইন্ডগুলি সমর্থিত:

str = "72 tocirah sneab"
s = str.split(/(?<=^\S+)\s/)
console.log(s)


str.match(/^(\S+)\s(.*)/).slice(1) কোনও স্ট্রিংয়ের পক্ষে কাজ করবে না যার কোনও স্থান নেই
জুনায়েদ

30

ES6 এ আপনিও করতে পারেন

let [first, ...second] = str.split(" ")
second = second.join(" ")

2
আমি এটি বেশ খানিকটা পছন্দ করেছি এবং এটি সূক্ষ্মভাবে কাজ করে তবে পারফরম্যান্সের ভিত্তিতে এটি সর্বাধিক উন্নত "সাবস্ট্রিং" সমাধানটির পক্ষে বেশ খারাপ। কেবল এটি পরীক্ষা করা হয়েছে এবং এটি প্রায় 10x ধীর।
pootzko

19

দেরিতে গেমটি, আমি জানি তবে এটি করার খুব সহজ উপায় আছে বলে মনে হচ্ছে:

const str = "72 tocirah sneab";
const arr = str.split(/ (.*)/);
console.log(arr);

এটি arr[0]সাথে "72"এবং arr[1]সাথে চলে যাবে "tocirah sneab"। দ্রষ্টব্য যে আরার [2] খালি থাকবে, তবে আপনি কেবল এটিকে উপেক্ষা করতে পারেন।

রেফারেন্সের জন্য:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split#Capturing_parentheses


নোট করুন যে এটি একটি শেষ ফাঁকা উপাদান উত্পাদন করে।
বেনিয়ামিন ইন্টাল

13
var arr = [];             //new storage
str = str.split(' ');     //split by spaces
arr.push(str.shift());    //add the number
arr.push(str.join(' '));  //and the rest of the string

//arr is now:
["72","tocirah sneab"];

তবে আমি এখনও মনে করি যদিও এর চেয়ে আরও দ্রুত উপায় আছে।


11

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

str_1 = str.split(/\s(.+)/)[0];  //everything before the first space
str_2 = str.split(/\s(.+)/)[1];  //everything after the first space

9

আপনি কেবল প্রথম ঘটনাটি প্রতিস্থাপন করতে .rep مقام ব্যবহার করতে পারেন,

str = str.replace(' ','<br />');

/ জি ছাড়ে।

ডেমো


3
@ ড্যানি হেররান .. না এটা হবে না? আপনি কি কোডটি পরীক্ষা করেছেন? কোনও / জি সংশোধক নেই। এটি বিশ্বব্যাপী নয়। কোডটি কী করে তা পুরোহিত করার আগে পরীক্ষার চেষ্টা করুন । পাশাপাশি তিনটি প্রধান ব্রাউজারে পরীক্ষিত। আপনি কী করেন তা আপনি কেন ভাবেন তা আমি জানতে চাই।
দাদালাস

এটি স্মার্ট কারণ আমি এটিকে সর্বদা একটি ত্রুটি হিসাবে বিবেচনা করেছি। এই প্রথম আমি এটি দেখছি এটির সুবিধা গ্রহণ করা হয়েছে :)
গোগল

2

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

arr = str.split(' ');             // ["72", "tocirah", "sneab"]
strA = arr[0];                    // "72"
strB = arr[1] + ' ' + arr[2];     // "tocirah sneab"

বিকল্পভাবে, আপনি যদি স্ট্রিং থেকে সরাসরি যা চান চেরি-বাছাই করতে চান আপনি এই জাতীয় কিছু করতে পারেন:

strA = str.split(' ')[0];                    // "72";
strB = str.slice(strA.length + 1);           // "tocirah sneab"

বা এই মত:

strA = str.split(' ')[0];                    // "72";
strB = str.split(' ').splice(1).join(' ');   // "tocirah sneab"

তবে আমি প্রথম উদাহরণটি পরামর্শ দিই।

ওয়ার্কিং ডেমো: জেসবিন


এটার মত! "কনস" আছে?
iglesiasedd

0

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

এই উদাহরণটি ডিভের ক্লাসগুলি "গ্যালারী_148 ইউআই-বাছাইযোগ্য" পেয়েছে এবং গ্যালারী আইডি 148 প্রদান করে।

var galleryClass = $(this).parent().prop("class"); // = gallery_148 ui-sortable
var galleryID = galleryClass.split(" ").shift(); // = gallery_148
galleryID = galleryID.split("_").pop(); // = 148
//or
galleryID = galleryID.substring(8); // = 148 also, but less versatile 

আমি নিশ্চিত এটি কম লাইনে কমপ্যাক্ট করা যেতে পারে তবে আমি পাঠ্যতার জন্য এটি প্রসারিত রেখেছি।


0

আমার কিছুটা আলাদা রেজাল্ট দরকার ছিল।

আমি প্রথম শব্দটি চেয়েছিলাম, এবং এর পরে যা এসেছিল - তা শূন্য হলেও।

str.substr(0, text.indexOf(' ') == -1 ? text.length : text.indexOf(' '));
str.substr(text.indexOf(' ') == -1 ? text.length : text.indexOf(' ') + 1);

সুতরাং ইনপুট যদি onewordআপনি পেতে onewordএবং ''

যদি ইনপুট হয় one word and some moreআপনি oneএবং পাবেন word and some more


0

আমি নিশ্চিত নই যে কেন অন্যান্য সমস্ত উত্তর এত জটিল, আপনি যখন এক লাইনে এটি সব করতে পারেন তখন জায়গার অভাবও পরিচালনা করছেন।

উদাহরণ হিসাবে, আসুন একটি নামের প্রথম এবং "অন্যান্য" উপাদানগুলি পান:

let [first, last] = 'John Von Doe'.split(/ (.*)/);
console.log({ first, last });

[first, last] = 'Surma'.split(/ (.*)/);
console.log({ first, last });


-1

নিম্নলিখিত ফাংশনটি সর্বদা বাক্যটিকে 2 টি উপাদানে বিভক্ত করবে । প্রথম উপাদানটিতে কেবলমাত্র প্রথম শব্দ থাকবে এবং দ্বিতীয় উপাদানটিতে অন্য সমস্ত শব্দ থাকবে (বা এটি খালি স্ট্রিং হবে)।

var arr1 = split_on_first_word("72 tocirah sneab");       // Result: ["72", "tocirah sneab"]
var arr2 = split_on_first_word("  72  tocirah sneab  ");  // Result: ["72", "tocirah sneab"]
var arr3 = split_on_first_word("72");                     // Result: ["72", ""]
var arr4 = split_on_first_word("");                       // Result: ["", ""]

function split_on_first_word(str)
{
    str = str.trim();  // Clean string by removing beginning and ending spaces.

    var arr = [];
    var pos = str.indexOf(' ');  // Find position of first space

    if ( pos === -1 ) {
        // No space found
        arr.push(str);                // First word (or empty)
        arr.push('');                 // Empty (no next words)
    } else {
        // Split on first space
        arr.push(str.substr(0,pos));         // First word
        arr.push(str.substr(pos+1).trim());  // Next words
    }

    return arr;
}

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