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


504

আমি কীভাবে জাভাস্ক্রিপ্টে একাধিক বিভাজকের সাথে একটি স্ট্রিং বিভক্ত করব? আমি কমা এবং ফাঁকা উভয় জায়গাতেই বিভক্ত হওয়ার চেষ্টা করছি তবে, আফাইক, জেএসের বিভক্ত ফাংশনটি কেবল একটি বিভাজককে সমর্থন করে।


3
উইন্ডোজগুলির নীচে নোডেজ দিয়ে নির্মিত ফাইল পাথগুলি বিভক্ত করার চেষ্টা করতে আমার এই সমস্যা হয়েছিল। মাঝে মাঝে একই পথে "/" এবং পিছনে "\" স্ল্যাশ ছিল।
ফুহরম্যানেটর

উত্তর:


707

পরামিতি হিসাবে একটি regexp মধ্যে পাস:

js> "Hello awesome, world!".split(/[\s,]+/)
Hello,awesome,world!

যুক্ত করতে সম্পাদিত:

অ্যারে বিয়োগ 1 এর দৈর্ঘ্য নির্বাচন করে আপনি শেষ উপাদানটি পেতে পারেন:

>>> bits = "Hello awesome, world!".split(/[\s,]+/)
["Hello", "awesome", "world!"]
>>> bit = bits[bits.length - 1]
"world!"

... এবং যদি প্যাটার্নটি মেলে না:

>>> bits = "Hello awesome, world!".split(/foo/)
["Hello awesome, world!"]
>>> bits[bits.length - 1]
"Hello awesome, world!"

1
আপনি আপনার জেএস> কনসোলের জন্য কী ব্যবহার করছেন?
কোর

4
গণ্ডার, মোজিলার জাভা স্ক্রিপ্ট জাভাস্ক্রিপ্টের প্রয়োগ: mozilla.org/rhino (... বা "সুডো অ্যাপট-গেট ইনস্টল গন্ডার")।
অ্যারন মেনপা

ধন্যবাদ। এর সাথে সম্পর্কিত আরও একটি প্রশ্ন আমাকে বিভক্ত অ্যারের শেষ উপাদানটি পাওয়া উচিত। অ্যারে না থাকলে এটি স্ট্রিং থেক্সটি ফিরিয়ে আনতে হবে

2
নিয়মিত প্রকাশের সাথে বিভক্ত হয়ে বিভাজকগুলি অপসারণের কোনও উপায় আছে কি?
অ্যান্ডারসন সবুজ

স্ট্রিং "হ্যালো ওয়ার্ল্ড" পাশাপাশি পাইপ চিহ্নের মতো অন্য একটি চরিত্র (বা অন্যান্য রেজেক্স) উভয়ের জন্য কীভাবে বিভক্ত হবে? (hello world)|\|যার বিভিন্ন চেষ্টা এখনও কার্যকর হয়নি। কোন ধারনা?
বাদামি

183

আপনি জাভাস্ক্রিপ্টের স্প্লিট অপারেটরে একটি রেজেক্স পাস করতে পারেন । উদাহরণ স্বরূপ:

"1,2 3".split(/,| /) 
["1", "2", "3"]

অথবা, আপনি যদি একাধিক বিভাজককে একসাথে কেবল হিসাবে কাজ করার অনুমতি দিতে চান:

"1, 2, , 3".split(/(?:,| )+/) 
["1", "2", "3"]

(আপনাকে নন-ক্যাপচারিং (? :) প্যারেন ব্যবহার করতে হবে কারণ অন্যথায় এটি ফলাফলটিতে আবার ছিটকে যায় Or

(সাফারি + এফএফ পরীক্ষিত উদাহরণ)


3
যদি আপনার এক হিসাবে কাজ করতে একাধিক অক্ষরের প্রয়োজন হয় তবে "এক; # দ্বিতীয়; # নতুন জার্সি" বলুন, আপনি কেবল স্ট্রিংটি "; #" বিভক্ত ফাংশনে পাস করতে পারেন। "এক; # দুই; # নতুন জার্সি" .স্প্লিট ("; #") [2] === "নতুন জার্সি"
ওসকর অস্টেগার্ড

যদি আপনার একাধিক চরিত্রের বিভাজন প্রয়োজন হয় তবে এই পদ্ধতিটি অক্ষর শ্রেণীর চেয়ে আরও ভাল কাজ করে। |জেসির শো হিসাবে সেগুলি আলাদা করুন ।
ডিভাইস 1

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

1
@ অ্যান্ডারসগ্রিন এটি আপনি যা চান ঠিক তার উপর নির্ভর করে; এক্ষেত্রে একাধিক বিভাজনকারী রয়েছে, সুতরাং আপনি কি তাদের সবগুলি রাখতে চান? আলাদা আইটেম হিসাবে? আগের আইটেম যোগ হয়েছে? পরের আইটেম? এটা আমার কাছে অস্পষ্ট বলে মনে হচ্ছে। আপনি যা খুঁজছেন তার কয়েকটি উদাহরণ সহ আপনি একটি নতুন প্রশ্ন করতে চাইবেন।
জেসি রুশাক

@ জেসারুসাক আমার অর্থ পৃথককারীদের সকলকে আলাদা আলাদা আইটেম হিসাবে রাখা, যাতে একটি স্ট্রিং বিভাজকের তালিকা ব্যবহার করে টোকেনাইজড হতে পারে।
অ্যান্ডারসন সবুজ

55

আরেকটি সহজ তবে কার্যকর পদ্ধতি হ'ল স্প্লিট + বার বার ব্যবহার করা।

"a=b,c:d".split('=').join(',').split(':').join(',').split(',')

মূলত যোগদানের পরে একটি বিভাজন করা গ্লোবাল রিপ্লেসের মতো, সুতরাং এটি প্রতিটি বিভাজককে কমা দিয়ে প্রতিস্থাপন করে তারপরে সমস্ত প্রতিস্থাপনের পরে এটি কমাতে একটি চূড়ান্ত বিভাজন ঘটায় does

উপরের মত প্রকাশের ফলাফল:

['a', 'b', 'c', 'd']

এটি প্রসারিত করে আপনি এটি কোনও ফাংশনে রাখতে পারেন:

function splitMulti(str, tokens){
        var tempChar = tokens[0]; // We can use the first token as a temporary join character
        for(var i = 1; i < tokens.length; i++){
            str = str.split(tokens[i]).join(tempChar);
        }
        str = str.split(tempChar);
        return str;
}

ব্যবহার:

splitMulti('a=b,c:d', ['=', ',', ':']) // ["a", "b", "c", "d"]

আপনি যদি এই কার্যকারিতাটি প্রচুর পরিমাণে ব্যবহার করেন তবে এটি String.prototype.splitসুবিধার জন্য মোড়কের বিষয়টি বিবেচনা করার মতোও হতে পারে (আমি মনে করি যে আমার ফাংশনটি মোটামুটি নিরাপদ - একমাত্র বিবেচনাটি শর্তসাপেক্ষীর অতিরিক্ত ওভারহেড (অপ্রাপ্তবয়স্ক) এবং এটি সীমাবদ্ধতার আর্গুমেন্টের বাস্তবায়ন অভাবের বিষয়) যদি একটি অ্যারে পাস হয়)।

splitMultiনীচে এই পদ্ধতির ব্যবহার করে কেবল এটি মোড়ানো থাকলে ফাংশনটি অন্তর্ভুক্ত করার বিষয়টি নিশ্চিত করুন :)। এছাড়াও লক্ষণীয় যে কিছু লোক বিল্ট-ইনগুলি প্রসারিত করার বিষয়ে ভ্রান্ত হয়ে পড়েছিল (যেহেতু অনেকে এটি ভুল করে এবং দ্বন্দ্ব দেখা দিতে পারে) তাই সন্দেহজনকভাবে যদি এটি ব্যবহারের আগে আরও সিনিয়র কারও সাথে কথা বলেন বা এসও জিজ্ঞাসা করেন :)

    var splitOrig = String.prototype.split; // Maintain a reference to inbuilt fn
    String.prototype.split = function (){
        if(arguments[0].length > 0){
            if(Object.prototype.toString.call(arguments[0]) == "[object Array]" ) { // Check if our separator is an array
                return splitMulti(this, arguments[0]);  // Call splitMulti
            }
        }
        return splitOrig.apply(this, arguments); // Call original split maintaining context
    };

ব্যবহার:

var a = "a=b,c:d";
    a.split(['=', ',', ':']); // ["a", "b", "c", "d"]

// Test to check that the built-in split still works (although our wrapper wouldn't work if it didn't as it depends on it :P)
        a.split('='); // ["a", "b,c:d"] 

উপভোগ করুন!


3
আপনি লেখেন for(var i = 0; i < tokens.length; i++)আর করেন না কেন for(var i = 1; i < tokens.length; i++)?
টিক দিন

আমি সেই অপটিমাইজেশনটি মিস করেছি, আপনি ঠিক বলেছেন আমরা tokens[1]একটি পুনরাবৃত্তি সংরক্ষণ করতে শুরু করতে tokens[0] == tempcharপারি এবং শেষ পর্যন্ত পুনরাবৃত্ত tempcharহওয়ার পরে আমরা বিভক্ত হয়ে যাই tokens। উত্তর অনুসারে আমি আপডেট করব @ ধন্যবাদ :)
ব্রায়ান

20

এটিকে সহজ রাখতে দিন: (আপনার রেজেক্সের সাথে "["] + "যুক্ত করুন" 1 বা তার বেশি ")

এর অর্থ "+" এবং "{1,।" সমান।

var words = text.split(/[ .:;?!~,`"&|()<>{}\[\]\r\n/\\]+/); // note ' and - are kept

2
শেষে একটি "+" যুক্ত অর্থ 1 বা তার বেশি
আশের

6
আমি বলব এটি ন্যূনতম, সহজ নয়
ড্যারিল হেবস

+ এবং - :- ডি এর জন্য, তবে ফাঁকা চরের পরিবর্তে var গুলি: বর্ণ শব্দগুলি = টেক্সট.স্প্লিট (/ [\ s.: ;??!~,` "& Skype()<>{}\= \ + \ - [] \ r \ n / \] + /);
ডিডিয়ার 68

12

কৌশল পদ্ধতি:

var s = "dasdnk asd, (naks) :d skldma";
var a = s.replace('(',' ').replace(')',' ').replace(',',' ').split(' ');
console.log(a);//["dasdnk", "asd", "naks", ":d", "skldma"]

3
এটি ভুল কারণ .replace () সমস্ত উপাদানকে প্রতিস্থাপন করে না:/

1
আপনি পরিবর্তন করতে পারেন '('জন্য /(/gসব প্রতিস্থাপন (উপাদান - gহয় বিশ্বব্যাপী তাই এটি সব ঘটনার জন্য অনুসন্ধান - RegExp জন্য তা পতাকাঙ্কিত (না প্রথমটি
codename-

7

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

splitString = function(string, splitters) {
    var list = [string];
    for(var i=0, len=splitters.length; i<len; i++) {
        traverseList(list, splitters[i], 0);
    }
    return flatten(list);
}

traverseList = function(list, splitter, index) {
    if(list[index]) {
        if((list.constructor !== String) && (list[index].constructor === String))
            (list[index] != list[index].split(splitter)) ? list[index] = list[index].split(splitter) : null;
        (list[index].constructor === Array) ? traverseList(list[index], splitter, 0) : null;
        (list.constructor === Array) ? traverseList(list, splitter, index+1) : null;    
    }
}

flatten = function(arr) {
    return arr.reduce(function(acc, val) {
        return acc.concat(val.constructor === Array ? flatten(val) : val);
    },[]);
}

var stringToSplit = "people and_other/things";
var splitList = [" ", "_", "/"];
splitString(stringToSplit, splitList);

উপরোক্ত উদাহরণগুলি: ["people", "and", "other", "things"]

দ্রষ্টব্য: flattenফাংশন রোসেটা কোড থেকে নেওয়া হয়েছিল


6

আপনি কেবলমাত্র আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদাसन [علیজ علیحده علیحده وصاحب وبغضب وصاياء।) আপনি আলাদাভাবে আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা করে আলাদা আলাদা আলাদা করে আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা করে আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদাওয়ারের হিসাবে আপনার আলাদা আলাদা হিসাবে আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদাওয়ারটি হিসাবে আলাদাভাবে আলাদা আলাদা আলাদাভাবে ব্যবহার করতে চান উদাহরণস্বরূপ আপনি লিখতে পারেন:

console.log( "dasdnk asd, (naks) :d skldma".split(/[ \(,\)]+/) );

এবং আউটপুট হবে:

["dasdnk", "asd", "naks", ":d", "skldma"]

3

একটি বিভাজককে অন্য বিভাজক করে তুলতে আপনার কিছু স্ট্রিং প্রতিস্থাপন করা উচিত যাতে আপনার বিভাজনে ডিল করার জন্য কেবল তখন একটি বিভাজক থাকে।


3

হাই আপনার উদাহরণস্বরূপ, যদি আপনি স্ট্রিংতে বিভক্ত হয়ে প্রতিস্থাপন করেন এবং 07:05:45 অপরাহ্ন

var hour = time.replace("PM", "").split(":");

ফলাফল

[ '07', '05', '45' ]

3

ES6 এ অর্জনের জন্য এখানে একটি নতুন উপায় :

function SplitByString(source, splitBy) {
  var splitter = splitBy.split('');
  splitter.push([source]); //Push initial value

  return splitter.reduceRight(function(accumulator, curValue) {
    var k = [];
    accumulator.forEach(v => k = [...k, ...v.split(curValue)]);
    return k;
  });
}

var source = "abc,def#hijk*lmn,opq#rst*uvw,xyz";
var splitBy = ",*#";
console.log(SplitByString(source, splitBy));

এই ফাংশন নোট করুন:

  • কোনও রেজেক্স জড়িত নেই
  • এটি প্রদর্শিত হিসাবে একই ক্রমে বিভক্ত মান প্রদান করে source

উপরের কোডের ফলাফল হবে:

এখানে চিত্র বর্ণনা লিখুন


2
a = "a=b,c:d"

array = ['=',',',':'];

for(i=0; i< array.length; i++){ a= a.split(array[i]).join(); }

এটি কোনও বিশেষ পাঠক ছাড়াই স্ট্রিংটি ফিরিয়ে দেবে।


2

@ ব্রায়ান উত্তর আমার রিফ্যাক্টর

var string = 'and this is some kind of information and another text and simple and some egample or red or text';
var separators = ['and', 'or'];

function splitMulti(str, separators){
            var tempChar = 't3mp'; //prevent short text separator in split down
            
            //split by regex e.g. \b(or|and)\b
            var re = new RegExp('\\b(' + separators.join('|') + ')\\b' , "g");
            str = str.replace(re, tempChar).split(tempChar);
            
            // trim & remove empty
            return str.map(el => el.trim()).filter(el => el.length > 0);
}

console.log(splitMulti(string, separators))


1

আমি প্রধান কারণ আমি প্রয়োজন এই উভয় ফাইল পাথ বিভক্ত করতে হয় যে এক খুঁজে /এবং \। এটি কিছুটা কৌতুকপূর্ণ রেজেক্স তাই আমি রেফারেন্সের জন্য এটি এখানে পোস্ট করব:

var splitFilePath = filePath.split(/[\/\\]/);

1

আমি মনে করি আপনি কী সরিয়ে নিতে চান তার পরিবর্তে আপনি কী ছেড়ে যেতে চান তা নির্দিষ্ট করে দেওয়া সহজ।

যেন আপনার কেবল ইংরেজি শব্দ থাকতে চান তবে আপনি এরকম কিছু ব্যবহার করতে পারেন:

text.match(/[a-z'\-]+/gi);

উদাহরণ (স্নিপেট চালান):

var R=[/[a-z'\-]+/gi,/[a-z'\-\s]+/gi];
var s=document.getElementById('s');
for(var i=0;i<R.length;i++)
 {
  var o=document.createElement('option');
  o.innerText=R[i]+'';
  o.value=i;
  s.appendChild(o);
 }
var t=document.getElementById('t');
var r=document.getElementById('r');

s.onchange=function()
 {
  r.innerHTML='';
  var x=s.value;
  if((x>=0)&&(x<R.length))
   x=t.value.match(R[x]);
  for(i=0;i<x.length;i++)
   {
    var li=document.createElement('li');
    li.innerText=x[i];
    r.appendChild(li);
   }
 }
<textarea id="t" style="width:70%;height:12em">even, test; spider-man

But saying o'er what I have said before:
My child is yet a stranger in the world;
She hath not seen the change of fourteen years,
Let two more summers wither in their pride,
Ere we may think her ripe to be a bride.

—Shakespeare, William. The Tragedy of Romeo and Juliet</textarea>

<p><select id="s">
 <option selected>Select a regular expression</option>
 <!-- option value="1">/[a-z'\-]+/gi</option>
 <option value="2">/[a-z'\-\s]+/gi</option -->
</select></p>
 <ol id="r" style="display:block;width:auto;border:1px inner;overflow:scroll;height:8em;max-height:10em;"></ol>
</div>


1

@ স্টিফেন-সুইডারডুক সমাধান থেকে শুরু করে (এটি আমার কাছে আরও আকর্ষণীয় ছিল!), আমি আরও জেনেরিক এবং পুনঃব্যবহারযোগ্য করতে এটি কিছুটা পরিবর্তন করেছি:

/**
 * Adapted from: http://stackoverflow.com/questions/650022/how-do-i-split-a-string-with-multiple-separators-in-javascript
*/
var StringUtils = {

  /**
   * Flatten a list of strings
   * http://rosettacode.org/wiki/Flatten_a_list
   */
  flatten : function(arr) {
    var self=this;
    return arr.reduce(function(acc, val) {
        return acc.concat(val.constructor === Array ? self.flatten(val) : val);
    },[]);
  },

  /**
   * Recursively Traverse a list and apply a function to each item
   * @param list array
   * @param expression Expression to use in func
   * @param func function of (item,expression) to apply expression to item
   *
   */
  traverseListFunc : function(list, expression, index, func) {
    var self=this;
    if(list[index]) {
        if((list.constructor !== String) && (list[index].constructor === String))
            (list[index] != func(list[index], expression)) ? list[index] = func(list[index], expression) : null;
        (list[index].constructor === Array) ? self.traverseListFunc(list[index], expression, 0, func) : null;
        (list.constructor === Array) ? self.traverseListFunc(list, expression, index+1, func) : null;
    }
  },

  /**
   * Recursively map function to string
   * @param string
   * @param expression Expression to apply to func
   * @param function of (item, expressions[i])
   */
  mapFuncToString : function(string, expressions, func) {
    var self=this;
    var list = [string];
    for(var i=0, len=expressions.length; i<len; i++) {
        self.traverseListFunc(list, expressions[i], 0, func);
    }
    return self.flatten(list);
  },

  /**
   * Split a string
   * @param splitters Array of characters to apply the split
   */
  splitString : function(string, splitters) {
    return this.mapFuncToString(string, splitters, function(item, expression) {
      return item.split(expression);
    })
  },

}

এবং তারপর

var stringToSplit = "people and_other/things";
var splitList = [" ", "_", "/"];
var splittedString=StringUtils.splitString(stringToSplit, splitList);
console.log(splitList, stringToSplit, splittedString);

এটি আসল হিসাবে ফিরে দেয়:

[ ' ', '_', '/' ] 'people and_other/things' [ 'people', 'and', 'other', 'things' ]

1

এটি করার একটি সহজ উপায় হ'ল প্রতিটি ডিলিমিটারের সাথে স্ট্রিংয়ের প্রতিটি অক্ষর প্রক্রিয়া করা এবং বিভাজনের একটি অ্যারে তৈরি করা:

splix = function ()
{
  u = [].slice.call(arguments); v = u.slice(1); u = u[0]; w = [u]; x = 0;

  for (i = 0; i < u.length; ++i)
  {
    for (j = 0; j < v.length; ++j)
    {
      if (u.slice(i, i + v[j].length) == v[j])
      {
        y = w[x].split(v[j]); w[x] = y[0]; w[++x] = y[1];
      };
    };
  };

  return w;
};

ব্যবহার: splix(string, delimiters...)

উদাহরণ: splix("1.23--4", ".", "--")

রিটার্নস: ["1", "23", "4"]


1

আমি এই জাতীয় ফাংশনের জন্য একটি ক্লাসিক বাস্তবায়ন সরবরাহ করব। কোডটি জাভাস্ক্রিপ্টের প্রায় সমস্ত সংস্করণে কাজ করে এবং কোনওভাবে সর্বোত্তম।

  • এটি রেজেক্স ব্যবহার করে না, যা বজায় রাখা শক্ত
  • এটি জাভাস্ক্রিপ্টের নতুন বৈশিষ্ট্য ব্যবহার করে না
  • এটি একাধিক .স্প্লিট ()। জোইন () অনুরোধ ব্যবহার করে না যা আরও কম্পিউটার মেমরির প্রয়োজন

খাঁটি কোড:

var text = "Create a function, that will return an array (of string), with the words inside the text";

println(getWords(text));

function getWords(text)
{
    let startWord = -1;
    let ar = [];

    for(let i = 0; i <= text.length; i++)
    {
        let c = i < text.length ? text[i] : " ";

        if (!isSeparator(c) && startWord < 0)
        {
            startWord = i;
        }

        if (isSeparator(c) && startWord >= 0)
        {
            let word = text.substring(startWord, i);
            ar.push(word);

            startWord = -1;
        }
    }

    return ar;
}

function isSeparator(c)
{
    var separators = [" ", "\t", "\n", "\r", ",", ";", ".", "!", "?", "(", ")"];
    return separators.includes(c);
}

আপনি খেলার মাঠে কোডটি চলমান দেখতে পারেন: https://codeguppy.com/code.html?IJI0E4OGnkyTZnoszAzf


0

আমি RegEx এর কার্যকারিতা জানি না, তবে এখানে RegEx এর নেটিভ নেটিভ হ্যাশসেটের জন্য আরেকটি বিকল্প রয়েছে এবং পরিবর্তে ও (ম্যাক্স (স্ট্রাইলথেনথ, ডেলিমিটার.লেন্থ)) জটিলতায় কাজ করে:

var multiSplit = function(str,delimiter){
    if (!(delimiter instanceof Array))
        return str.split(delimiter);
    if (!delimiter || delimiter.length == 0)
        return [str];
    var hashSet = new Set(delimiter);
    if (hashSet.has(""))
        return str.split("");
    var lastIndex = 0;
    var result = [];
    for(var i = 0;i<str.length;i++){
        if (hashSet.has(str[i])){
            result.push(str.substring(lastIndex,i));
            lastIndex = i+1;
        }
    }
    result.push(str.substring(lastIndex));
    return result;
}

multiSplit('1,2,3.4.5.6 7 8 9',[',','.',' ']);
// Output: ["1", "2", "3", "4", "5", "6", "7", "8", "9"]

multiSplit('1,2,3.4.5.6 7 8 9',' ');
// Output: ["1,2,3.4.5.6", "7", "8", "9"]

11
হ্যাঁ, আপনি যা লিখছেন তা আসলে কীভাবে পরীক্ষা করবেন? jsperf.com/slice-vs-custom এটি দেখায় যে আপনার কোডটি এই উদাহরণে 10 গুণ ধীর। আপনি কী ধারণা দিয়েছেন যে 2 বার স্লাইস, 2 বার কনক্যাট, 1 সময় বিভক্ত, 1 বার শিফ্ট এবং কোনও দৈর্ঘ্যের ক্যাচিং ব্যবহার করা পারফরম্যান্স বান্ধব?
পেটার

আমি কোডটি আপডেট করেছি, এখন কেবলমাত্র ন্যূনতম পরিমাণে স্লাইস নেই কোনও শিফট, বিভাজন বা ইত্যাদি
Or

0

সেরা উপায় নয় তবে একাধিক এবং পৃথক পৃথক / ডেলিমিটারগুলির সাথে বিভক্ত হয়ে কাজ করে

এইচটিএমএল

<button onclick="myFunction()">Split with Multiple and Different seperators/delimiters</button>
<p id="demo"></p>

জাভাস্ক্রিপ্ট

<script>
function myFunction() {

var str = "How : are | you doing : today?";
var res = str.split(' | ');

var str2 = '';
var i;
for (i = 0; i < res.length; i++) { 
    str2 += res[i];

    if (i != res.length-1) {
      str2 += ",";
    }
}
var res2 = str2.split(' : ');

//you can add countless options (with or without space)

document.getElementById("demo").innerHTML = res2;
</script>

-3

আমি regexp ব্যবহার করি:

str =  'Write a program that extracts from a given text all palindromes, e.g. "ABBA", "lamal", "exe".';

var strNew = str.match(/\w+/g);

// Output: ["Write", "a", "program", "that", "extracts", "from", "a", "given", "text", "all", "palindromes", "e", "g", "ABBA", "lamal", "exe"]

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