নিউলাইনে ('\ n') দ্বারা স্ট্রিংকে আলাদা করতে নোডে কীভাবে?


135

নিউলাইনে ('\ n') দ্বারা স্ট্রিংকে আলাদা করতে নোডে কীভাবে? আমার মতো সরল স্ট্রিং রয়েছে var a = "test.js\nagain.js"এবং আমার পাওয়া দরকার ["test.js", "again.js"]। আমি চেষ্টা করেছিলাম

a.split("\n");
a.split("\\n");
a.split("\r\n");
a.split("\r");

কিন্তু উপরের কোনওটিই কাজ করে না।



7
split()মূল স্ট্রিংটি পরিবর্তন করে না।
থাগসেকেল

এটি একটি খাঁটি জাভাস্ক্রিপ্ট প্রশ্নের মতো দেখাচ্ছে, কোনও নোড.জেএস ট্যাগের প্রয়োজন নেই।
উইক

উত্তর:


238

/\r?\n/উইন্ডোজ এবং ইউএনআইএক্স উভয় সিস্টেমের দ্বারা ব্যবহারযোগ্য হতে চাই এমন একটি রেজেক্সে বিভক্ত করার চেষ্টা করুন ।

> "a\nb\r\nc".split(/\r?\n/)
[ 'a', 'b', 'c' ]

3
ক্লাসিক ম্যাকস সম্পর্কে কি? ;)
অ্যাশলেএফ

10
স্টিভ জবসের সাথে ক্লাসিক ম্যাকস মারা গেল ... দু: খ :(
ymz

43
: ধরা \ N, \ R এবং \ r \ nsplit(/[\r\n]+/)
জুলিয়ান মেমরি

2
ম্যাকোসএক্স আর একক use r ব্যবহার করে না, এটি কেবল পুরানো ম্যাকের জন্য ছিল। আমি মনে করি তাদের অন্যান্য ইউনিক্সের মতোই \ n রয়েছে।
jcubic

12
/ [\ r \ n] + / খালি লাইনগুলি ফিল্টার করবে
স্পঞ্জম্যান

49

যদি ফাইলটি আপনার সিস্টেমে স্থানীয় হয় (অবশ্যই এর কোনও নিশ্চয়তা নেই) তবে নোড আপনাকে সহায়তা করতে পারে:

var os = require('os');

a.split(os.EOL);

প্ল্যাটফর্ম বহনযোগ্যতার জন্য যদিও নোড থেকে আউটপুট স্ট্রিং তৈরির জন্য এটি সাধারণত বেশি কার্যকর ।


5
হ্যাঁ, আপনার সাধারণত এটি করা উচিত নয়। প্ল্যাটফর্ম নির্বিশেষে আপনার নতুন লাইনগুলি পার্স করা উচিত।
1j01

আমি হাইলাইট করেছি যে এটি বিশেষত প্রথম সিস্টেমে আপনার সিস্টেমে স্থানীয় ফাইলের ক্ষেত্রে। উপরের উত্তরটি যখন এটি অজানা বা মিশ্রিত হয় তখন উপযুক্ত।
qubyte

ঠিক। অথবা যখন এটি এখন "পরিচিত" তবে ভবিষ্যতে পরিবর্তিত হতে পারে।
1j01

প্ল্যাটফর্মটিতে ফাইলগুলি লোড করার সময় কেবল সেগুলি কাজ করে they
স্পঞ্জম্যান

33

দেখে মনে হচ্ছে রেগেক্স /\r\n|\r|\n/সিআর, এলএফ এবং সিআরএলএফ লাইন সমাপ্তিগুলি, তাদের মিশ্র সিকোয়েন্সগুলি পরিচালনা করে এবং খালি সমস্ত লাইনকে অভ্যন্তরে রাখে। চেষ্টা কর!

function splitLines(t) { return t.split(/\r\n|\r|\n/); }

// single newlines
splitLines("AAA\rBBB\nCCC\r\nDDD");
// double newlines
splitLines("EEE\r\rFFF\n\nGGG\r\n\r\nHHH");
// mixed sequences
splitLines("III\n\r\nJJJ\r\r\nKKK\r\n\nLLL\r\n\rMMM");

ফলস্বরূপ আপনার এই অ্যারেগুলি পাওয়া উচিত:

[ "AAA", "BBB", "CCC", "DDD" ]
[ "EEE", "", "FFF", "", "GGG", "", "HHH" ]
[ "III", "", "JJJ", "", "KKK", "", "LLL", "", "MMM" ]

আপনি সেই রেজেক্সকে অন্যান্য বৈধ ইউনিকোড লাইন টার্মিনেটরগুলি যুক্ত |\xHHবা |\uHHHHঅংশগুলির দ্বারা স্বীকৃত করতে শেখাতে পারেন , যেখানে Hঅতিরিক্ত টার্মিনেটর চরিত্র কোডেপয়েন্টের হেক্সাডেসিমাল সংখ্যা (যেমন উইকিপিডিয়া নিবন্ধে দেখা যায় U+HHHH)।


30
a = a.split("\n");

নোট করুন যে splitটিংটি মূল স্ট্রিংকে কেবল বরাদ্দ না করে নতুন অ্যারেটি দেয়। আপনার এটি স্পষ্টভাবে একটি পরিবর্তনশীলতে সঞ্চয় করতে হবে।


17

একটি সমাধান যা মিশ্রিতগুলি সহ সমস্ত লাইন সমাপ্তির সাথে কাজ করে এবং খালি লাইন রাখে পাশাপাশি দুটি প্রতিস্থাপন এবং একটি বিভাজন নিম্নরূপে ব্যবহার করা যায়

text.replace(/\r\n/g, "\r").replace(/\n/g, "\r").split(/\r/);

এটি পরীক্ষা করার জন্য কিছু কোড

  var CR = "\x0D";  //   \r
  var LF = "\x0A";  //   \n

  var mixedfile = "00" + CR + LF +            // 1 x win
                  "01" + LF +                 // 1 x linux
                  "02" + CR +                 // 1 x old mac
                  "03" + CR + CR +            // 2 x old mac
                  "05" + LF + LF +            // 2 x linux
                  "07" + CR + LF + CR + LF +  // 2 x win
                  "09";

  function showarr (desc, arr)
  {
     console.log ("// ----- " + desc);
     for (var ii in arr)
        console.log (ii + ") [" + arr[ii] +  "] (len = " + arr[ii].length + ")");
  }

  showarr ("using 2 replace + 1 split", 
           mixedfile.replace(/\r\n/g, "\r").replace(/\n/g, "\r").split(/\r/));

এবং আউটপুট

  // ----- using 2 replace + 1 split
  0) [00] (len = 2)
  1) [01] (len = 2)
  2) [02] (len = 2)
  3) [03] (len = 2)
  4) [] (len = 0)
  5) [05] (len = 2)
  6) [] (len = 0)
  7) [07] (len = 2)
  8) [] (len = 0)
  9) [09] (len = 2)

1
প্রকৃতপক্ষে ব্লাকওয়াটার দ্বারা প্রদত্ত সমাধান: text.split (/ \ r \ n | \ n | \ r /); একই কাজ করুন এবং এটি খাটো এবং দ্রুত
আলেজাদ্রো জালবার্ডার

7

প্রথমটির কাজ করা উচিত:

> "a\nb".split("\n");
[ 'a', 'b' ]
> var a = "test.js\nagain.js"
undefined
> a.split("\n");
[ 'test.js', 'again.js' ]

4

নোড বা ব্রাউজারগুলিতে লাইন এন্ডিংয়ের সাথে কাজ করার জন্য আমি একটি eolমডিউল তৈরি করেছি । এটি একটি বিভক্ত পদ্ধতি মত

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