স্ট্রিং থেকে সমস্ত লাইন ব্রেকগুলি কীভাবে সরিয়ে ফেলা যায়


440

আমার একটি টেক্সেরিয়ায় একটি পাঠ্য আছে এবং আমি এটি মূল্য মানটি ব্যবহার করে পড়ি।

এখন আমি এখন Enterআমার পাঠ্য থেকে সমস্ত লাইনব্রেকগুলি (যখন আপনি চাপলে তৈরি করা হয় সেই চরিত্রটি ) মুছে ফেলতে চাই a নিয়মিত প্রকাশের সাথে পুনরায় স্থান করুন, তবে আমি কীভাবে একটি রেজেক্সে লাইন ব্রেককে নির্দেশ করব?

যদি তা সম্ভব না হয় তবে অন্য কোনও উপায় আছে কি?


উত্তর:


501

এটি সম্ভবত একটি FAQ। যাইহোক, লাইন ব্রেক (আরও ভাল: নিউলাইনস) ক্যারিজ রিটার্নের (সিআর, \rপুরানো ম্যাক্সের উপর), লাইন ফিড (এলএফ,, \nইউনিসিস ইনক্লুড। লিনাক্সে) বা সিআর এর পরে এলএফ ( \r\nউইনডোসে) হতে পারে। (অন্য উত্তরের বিপরীতে, চরিত্রের এনকোডিংয়ের সাথে এর কোনও যোগসূত্র নেই))

অতএব, RegExpসমস্ত বৈকল্পিকের সাথে মেলে সবচেয়ে দক্ষ আক্ষরিক হয়

/\r?\n|\r/

আপনি যদি একটি স্ট্রিংয়ে সমস্ত নতুন লাইনের সাথে মিল রাখতে চান তবে একটি বিশ্বব্যাপী ম্যাচ ব্যবহার করুন,

/\r?\n|\r/g

যথাক্রমে। তারপরে আরও replaceকয়েকটি উত্তরের পরামর্শ অনুযায়ী পদ্ধতিটি নিয়ে এগিয়ে যান । (সম্ভবত আপনি নতুনলাইনগুলি সরাতে চান না , তবে এটিকে অন্য সাদা স্থানের সাথে প্রতিস্থাপন করুন, উদাহরণস্বরূপ স্পেস অক্ষর, যাতে শব্দ অক্ষত থাকে))


16
সম্পূর্ণতার জন্য, এটি লক্ষ করা উচিত যে ইউনিকোডে চারটি নতুন লাইন অক্ষর রয়েছে: \u000aবা \n, যা একটি লাইন ফিড; \u000dবা \r, যা একটি গাড়ীর রিটার্ন; \u2028, একটি লাইন বিভাজক; এবং \u2029, একটি অনুচ্ছেদ বিভাজক। যদিও অনুশীলনে, আপনার পোস্ট করা রেজেক্স বেশিরভাগ ক্ষেত্রেই যথেষ্ট।
ম্যাথিয়াস বাইনেস

4
@ ম্যাথিয়াসবাইনস ধন্যবাদ, তবে ইউ + 2028 এবং ইউ + 2029 স্পষ্টভাবে এইচটিএমএল (4.01) এ লাইন বিরতি গঠন করে না , যা ডোম ট্রি এবং টেক্সারিয়ার
12 '

5
@PointedEars হ্যাঁ, কিন্তু এইচটিএমএল ধারাবাহিকতাতে যখন পাঠ্য এলাকা সেটিংস রয়েছে ঘটবে না .valueপরিবর্তনশীল, যেমন textarea.value = 'a\u2029b'; textarea.value.charAt(1) == '\u2029'; // true। তবে এটি সম্ভবত একটি প্রান্তের কেস - যেমনটি আমি বলেছি, বেশিরভাগ ক্ষেত্রে আপনার রেজেক্স যথেষ্ট।
ম্যাথিয়াস বাইনেন্স

2
@ ম্যাথিয়াসবাইনস, কারণ ইউ + 2028 এবং ইউ + 2029 এইচটিএমএল (4.01) এ লাইন বিরতি গঠন করে না , এই কার্যভারটি কোনও বড় ডিওএম প্রয়োগ এবং লেআউট ইঞ্জিন সহ টেক্সারিয়ায় দুটি লাইন প্রদর্শন করে না । সুতরাং তাদের ডান মনের কেউই প্রথমে এ জাতীয় কার্যনির্বাহীকরণ করবে না।
পয়েন্টেড

1
টেক্সটইন.রেপ্লেস (/ (\\ r \\ n | \\ n |) r) / gm, "") এর জন্য এটি কাজ করার জন্য আমাকে ব্যাকস্ল্যাশ থেকে বাঁচতে হয়েছিল। এখনও +1। আপনাকে ধন্যবাদ
ক্র্যাব বালতি

511

আপনি কীভাবে একটি লাইন বিরতি পাবেন অপারেটিং সিস্টেম এনকোডিংয়ের মধ্যে পরিবর্তিত হয়। উইন্ডোজ হবে \r\n, তবে লিনাক্স কেবল ব্যবহার করে \nএবং অ্যাপল ব্যবহার করে \r

আমি এটি জাভাস্ক্রিপ্ট লাইন বিরতিতে পেয়েছি :

someText = someText.replace(/(\r\n|\n|\r)/gm, "");

এটি সকল ধরণের লাইন ব্রেকগুলি সরিয়ে ফেলতে হবে।


18
কেন আলাদা হচ্ছে না \r\n এবং \n এবং \r মাত্র বেশী ভালো /[\n\r]/g? অবশ্যই এটি যতটা হওয়া উচিত তার চেয়ে ধীর,
কোডিং

2
/ [\ N \ r] / g ব্যবহার করে নোড.জেজে মেমচেড থেকে ফিরে আসা ডেটা পার্স করার সময় আমার পক্ষে কৌশলটি করা হয়েছিল। ধন্যবাদ কোডিং! উত্তরের বিকল্পটি এটিতে কসরত করেছে।
কাইল কুটস

111

var str = " \n this is a string \n \n \n"

console.log(str);
console.log(str.trim());

String.trim() স্ট্রিংয়ের শুরু এবং শেষ থেকে হোয়াইটস্পেস সরিয়ে দেয় ... নিউলাইনগুলি সহ।

const myString = "   \n \n\n Hey! \n I'm a string!!!         \n\n";
const trimmedString = myString.trim();

console.log(trimmedString);
// outputs: "Hey! \n I'm a string!!!"

এখানে ফিডল একটি উদাহরণ: http://jsfiddle.net/BLs8u/

বিঃদ্রঃ! এটি কেবল স্ট্রিংয়ের শুরু এবং শেষের ছাঁটাই করে, স্ট্রিংয়ের মাঝখানে লাইন ব্রেক বা হোয়াইটস্পেস নয়।


33
এটি কেবল স্ট্রিংয়ের শুরু এবং শেষ থেকে লাইন ব্রেকগুলি সরিয়ে দেয়। ওপি জিজ্ঞাসা করেছিল কীভাবে সমস্ত লাইনের ব্রেকগুলি সরিয়ে ফেলা যায়।
ইয়ান ওয়াল্টার

4
হ্যাঁ, কেবল একটি বিকল্প হিসাবে যুক্ত করা।
রবডাব্লু

1
আমার যা প্রয়োজন তার জন্য কাজ করেছি - স্ট্রিংয়ের শুরু এবং শেষ। ধন্যবাদ!
হার্লিন

46

আপনি \nনতুন লাইনের জন্য এবং \rক্যারেজ রিটার্নের জন্য একটি রেজেক্সে ব্যবহার করতে পারেন ।

var str2 = str.replace(/\n|\r/g, "");

বিভিন্ন অপারেটিং সিস্টেমগুলি বিভিন্ন লাইন এন্ডিং ব্যবহার করে \nএবং এর বিভিন্ন মিশ্রণ রয়েছে \r। এই রেজেক্স তাদের সমস্ত প্রতিস্থাপন করবে।


আমি মনে করি এটি কেবল প্রথম ঘটনাকেই প্রতিস্থাপন করবে
সেবাস

5
/\n|\r/gআরও দক্ষতার সাথে লিখিত /[\n\r]/gবা এমনকি হয় /[\n\r]+/g। আপনার একেবারে প্রয়োজন না হলে বিকল্প পরিবর্তন এড়িয়ে চলুন।
PointedEars

নিশ্চিত নয় যে এটি অভিযোগ করার মতো ment এটি আমি যা বলেছিলাম তা করে: সমস্ত কিছু সরিয়ে ফেলুন that এইচএক্স রেঞ্জের মধ্যে নয়। কোন চরগুলি অবশ্যই চর সেট সেট উপর নির্ভর করে, তবে এই পোস্টটি ASCII সম্পর্কে ছিল।
মাসি

22

আপনি যদি সিআর এবং এলএফ সহ সমস্ত নিয়ন্ত্রণের অক্ষর মুছে ফেলতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

myString.replace(/[^\x20-\x7E]/gmi, "")

এটি সমস্ত মুদ্রণযোগ্য অক্ষর মুছে ফেলবে। এএসসিআইআইএক্স হেক্স স্পেসের মধ্যে নয় এমন সমস্ত অক্ষর । প্রয়োজন অনুসারে এইচএক্স পরিসীমা নির্দ্বিধায় নির্দ্বিধায়।0x20-0x7E


2
এটি ইংরেজি ব্যতীত অন্যান্য ভাষা থেকে কিছু জাতীয় অক্ষরও সরিয়ে ফেলবে ....
smentek

21

এর সহজ সমাধানটি হ'ল:

let str = '\t\n\r this  \n \t   \r  is \r a   \n test \t  \r \n';
str.replace(/\s+/g, ' ').trim();
console.log(str); // logs: "this is a test"

.replace()সঙ্গে /\s+/gregexp পরিবর্তন করা হয় সকল গোষ্ঠী পুরো স্ট্রিং একটি একক স্থান থেকে সাদা স্পেস অক্ষরের তারপর আমরা .trim()ফলাফলের আগে ও টেক্সট পরে মাত্রাধিক সাদা স্পেস মুছে ফেলার জন্য।

হোয়াইট স্পেস অক্ষর হিসাবে বিবেচিত:
[ \f\n\r\t\v​\u00a0\u1680​\u2000​-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]


দুর্দান্ত, তবে আমি এটি ভেরিয়েবলটি পুনরায় নির্ধারণের জন্য কাজ করতে পারি:str = str.replace(/\s+/g, ' ').trim();
ফ্রেড কে


15

নতুন লাইন চরগুলি অপসারণ করতে এটি ব্যবহার করুন:

yourString.replace(/\r?\n?/g, '')

তারপরে আপনি নেতৃস্থানীয় এবং অনুসরণযোগ্য স্থানগুলি সরাতে আপনার স্ট্রিংটি ছাঁটাতে পারেন:

yourString.trim()

6

পয়েন্টার্স দ্বারা প্রদত্ত উত্তরটি আমাদের বেশিরভাগের প্রয়োজন। তবে ম্যাথিয়াস ব্যেনেন্সের উত্তর অনুসরণ করে আমি একটি উইকিপিডিয়া ভ্রমণে গিয়ে এটি পেয়েছি: https://en.wikedia.org/wiki/Newline

নিম্নলিখিতটি একটি ড্রপ-ইন ফাংশন যা উপরের উইকি পৃষ্ঠার এই উত্তরটির সময় "নতুন লাইন" হিসাবে বিবেচনা করে সমস্ত কিছু প্রয়োগ করে।

যদি কিছু আপনার ক্ষেত্রে ফিট না করে তবে এটি সরিয়ে ফেলুন। এছাড়াও, আপনি যদি পারফরম্যান্সের সন্ধান করেন তবে এটি এটি নাও হতে পারে তবে একটি দ্রুত সরঞ্জামের জন্য যে কোনও ক্ষেত্রে কাজটি করে, এটি কার্যকর হবে।

// replaces all "new line" characters contained in `someString` with the given `replacementString`
const replaceNewLineChars = ((someString, replacementString = ``) => { // defaults to just removing
  const LF = `\u{000a}`; // Line Feed (\n)
  const VT = `\u{000b}`; // Vertical Tab
  const FF = `\u{000c}`; // Form Feed
  const CR = `\u{000d}`; // Carriage Return (\r)
  const CRLF = `${CR}${LF}`; // (\r\n)
  const NEL = `\u{0085}`; // Next Line
  const LS = `\u{2028}`; // Line Separator
  const PS = `\u{2029}`; // Paragraph Separator
  const lineTerminators = [LF, VT, FF, CR, CRLF, NEL, LS, PS]; // all Unicode `lineTerminators`
  let finalString = someString.normalize(`NFD`); // better safe than sorry? Or is it?
  for (let lineTerminator of lineTerminators) {
    if (finalString.includes(lineTerminator)) { // check if the string contains the current `lineTerminator`
      let regex = new RegExp(lineTerminator.normalize(`NFD`), `gu`); // create the `regex` for the current `lineTerminator`
      finalString = finalString.replace(regex, replacementString); // perform the replacement
    };
  };
  return finalString.normalize(`NFC`); // return the `finalString` (without any Unicode `lineTerminators`)
});

3
প্রথম - এটি জেএস ব্যবহার না করে খুঁজে পাওয়া লোকদের জন্য - "সর্বাধিক" আরই স্বাদ সমর্থন করে \Rযা "সমস্ত" লাইনফিড। দ্বিতীয়ত - কেন সহজভাবে নয়someString.replace(new RegExp(lineTerminators.join('|')), '');
সামওয়ান

@ ক্লাসজি, আপনি একটি ভাল বক্তব্য রেখেছেন। আমি ভেবেছিলাম আমার লাইন মনে যখন আমি লিখেছি এই শুধুমাত্র চালানোর জন্য ছিল replace()জন্য lineTerminatorsযে কর্মক্ষমতা কারণে স্ট্রিং অস্তিত্ব।
futz.co

5

রেজেক্সে একটি লাইন ব্রেক \ n, সুতরাং আপনার স্ক্রিপ্টটি হবে

var test = 'this\nis\na\ntest\nwith\newlines';
console.log(test.replace(/\n/g, ' '));

5

আমি আমার উত্তরটি যুক্ত করছি, এটি উপরেরটিতে কেবল একটি সংযোজন, কারণ আমার জন্য আমি সমস্ত / এন বিকল্পগুলি চেষ্টা করেছি এবং এটি কার্যকর হয়নি, আমি দেখলাম আমার পাঠ্যটি সার্ভার থেকে ডাবল স্ল্যাশ নিয়ে আসছে তাই আমি এটি ব্যবহার করেছি:

var fixedText = yourString.replace(/(\r\n|\n|\r|\\n)/gm, '');

5

নীচে এই ফাংশনটি ব্যবহার করুন এবং আপনার জীবন সহজ করুন

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

function remove_linebreaks( var message ) {
    return message.replace( /[\r\n]+/gm, "" );
}

উপরের মত প্রকাশের ক্ষেত্রে, g এবং m গ্লোবাল এবং মাল্টলাইন পতাকাগুলির জন্য


2

নিম্নলিখিত কোড ব্যবহার করে দেখুন। এটি সমস্ত প্ল্যাটফর্মে কাজ করে।

var break_for_winDOS = 'test\r\nwith\r\nline\r\nbreaks';
var break_for_linux = 'test\nwith\nline\nbreaks';
var break_for_older_mac = 'test\rwith\rline\rbreaks';

break_for_winDOS.replace(/(\r?\n|\r)/gm, ' ');
//output
'test with line breaks'

break_for_linux.replace(/(\r?\n|\r)/gm, ' ');
//output
'test with line breaks'

break_for_older_mac.replace(/(\r?\n|\r)/gm, ' ');
// Output
'test with line breaks'

0

ম্যাক-এ, \nলাইনব্রেকগুলি মেলাতে কেবল রেজিএক্সপেক্টে ব্যবহার করুন । সুতরাং কোডটি হবে string.replace(/\n/g, ''), পিএস: জি অনুসরণ করা মানে প্রথমটির পরিবর্তে সমস্তটি মেলে।

উইন্ডোতে, এটি হবে \r\n

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