জাভাস্ক্রিপ্ট স্ট্রিংয়ের একক সাদা স্থানের সাথে একাধিক শ্বেতস্পেস প্রতিস্থাপন করুন


191

আমার কাছে অতিরিক্ত হোয়াইটস্পেসের সাথে স্ট্রিং রয়েছে, প্রতিবার কেবলমাত্র একটি সাদা জায়গা থাকতে আমি চাই এটি কেবল একটিই হোক be

যে কেউ? আমি গুগল অনুসন্ধান করার চেষ্টা করেছি, কিন্তু কিছুই আমার পক্ষে কার্যকর হয়নি।

ধন্যবাদ


2
শেষ / প্রারম্ভ থেকে নকল সাদা স্থান সরিয়ে ফেলুন, বা পাঠ্যের কোথাও?
নিনজাগেকো

উত্তর:


371

এটার মতো কিছু:

var s = "  a  b     c  ";

console.log(
  s.replace(/\s+/g, ' ')
)


31
@ আমার দয়া করে প্রশ্নটি মনোযোগ সহকারে পড়ুন: "প্রতিটি সময় কেবলমাত্র একটি সাদা জায়গা থাকতে আমি চাই এটি কেবল একটি"।
বজরেন্ড

5
এটা কি প্রকট নয়? এটি 1 টিরও বেশি শ্বেতস্পেসের চরের সাথে 1 সাদা স্থানের চরটি প্রতিস্থাপন করে। (পছন্দসই ফলাফল)
যুদ্ধ

4
@ কায়ারাঞ্জ এটি একটি নিয়মিত
এক্সপ্রেশন

1
@ ওয়ার্ডি, বন্ধ :-) এটি এক বা একাধিক স্থানকে একটি জায়গার সাথে প্রতিস্থাপন করে (তবে প্রকৃতপক্ষে, পছন্দসই ফলাফল)।
গ্রীনল্ডম্যান

1
যদি কেউ 1+ সাদা জায়গা একই ধরণের সাদা স্থানের সাথে প্রতিস্থাপন করতে চায় তবে কী হবে? (যেমন একটি স্পেস সহ 2+ স্পেস এবং একটি নতুন লাইন সহ 3 টি নতুন লাইন ইত্যাদি) যদি নতুন লাইন এবং স্পেস উভয়ই থাকে তবে এটি একটি নতুন লাইন দ্বারা প্রতিস্থাপন করতে হবে যেখানে শূন্যস্থান এবং ট্যাব উভয়ই থাকলে এটি একটি দ্বারা প্রতিস্থাপন করতে হবে স্পেস
টম

61

আপনি স্ট্রিংকে এই আচরণগুলি পদ্ধতি হিসাবে প্রয়োগ করার জন্য বাড়িয়ে তুলতে পারেন:

String.prototype.killWhiteSpace = function() {
    return this.replace(/\s/g, '');
};

String.prototype.reduceWhiteSpace = function() {
    return this.replace(/\s+/g, ' ');
};

এটি এখন আপনার পছন্দসই স্ট্রিংগুলি তৈরি করতে নীচের মার্জিত ফর্মগুলি ব্যবহার করতে সক্ষম করে:

"Get rid of my whitespaces.".killWhiteSpace();
"Get rid of my extra        whitespaces".reduceWhiteSpace();

14
স্ট্যান্ডার্ড অবজেক্টের প্রোটোটাইপ বাড়ানো সত্যিই বিতর্কিত প্যাটার্ন। আমি এই ধরনের একটি প্রাথমিক প্রশ্নের জন্য এটি সুপারিশ করব না।
বজরেন্ড

@ জাভিয়ার জন এটি স্ট্রিং করেছেন, স্ট্রিং নয়, একটি আর দিয়ে।
লাসাগাআন্ড্রয়েড

20

প্রতিস্থাপন ফাংশন সহ একটি নিয়মিত অভিব্যক্তি ব্যবহার কৌশলটি করে:

string.replace(/\s/g, "")

এই সমাধানটি প্রশ্ন অনুযায়ী ভুল। এবং আমি সত্যিই আশ্চর্য হয়েছি কেন আপনি আরও ভাল সমাধান পোস্ট হওয়ার দু'দিন পরে পোস্ট করেছেন ...
সেবাস্তিয়ান ম্যাচ

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

13

এখানে একটি অ-রেজেক্স সমাধান (কেবল মজাদার জন্য):

var s = ' a   b   word word. word, wordword word   ';

// with ES5:
s = s.split(' ').filter(function(n){ return n != '' }).join(' ');
console.log(s); // "a b word word. word, wordword word"

// or ES6:
s = s.split(' ').filter(n => n).join(' '); 
console.log(s); // "a b word word. word, wordword word"

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


12

আমি অনুমান করছি আপনি স্ট্রিংয়ের শুরু এবং / অথবা শেষের থেকে ফাঁকা স্থানগুলি সন্ধান করছেন ( সমস্ত স্থান সরিয়ে দেওয়ার চেয়ে ?

যদি এটি হয় তবে আপনার এটির মতো একটি রেইজেক্স দরকার:

mystring = mystring.replace(/(^\s+|\s+$)/g,' ');

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

mystring = mystring.replace(/\s+$/g,' ');

আশা করি এইটি কাজ করবে.


4
আমি আপনার রেইগেক্সের সরলতা পছন্দ করি, @ স্পডলি, তবে আপনার কোডটি কি শূন্যপথের রানগুলি শুরুতে এবং একক স্থানের অক্ষরের সাথে শেষ করে দেবে না? আমি ভেবেছিলাম লক্ষ্যটি ছিল পুরো প্রান্ত থেকে পুরোপুরি সাদা অংশ সরিয়ে নেওয়া, এক্ষেত্রে পরিবর্তনের স্ট্রিংটির ''পরিবর্তে হওয়া উচিত ' '
র‌্যান্ডাল কুক

8

jQuery.trim () ভাল কাজ করে।

http://api.jquery.com/jQuery.trim/


14
কেবল মনে রাখবেন যে এটি সমস্ত সাদা স্থান সরিয়ে দেয় না। দস্তাবেজগুলির উদ্ধৃতি: " একটি স্ট্রিংয়ের শুরু এবং শেষ থেকে সাদা স্থানটি সরান " "
জোনিক

6

আমি জানি যে কোনও বিষয়ে আমার নেক্রোমেন্সি করা উচিত নয়, তবে প্রশ্নের বিবরণ দেওয়াতে আমি সাধারণত এটি বোঝাতে চাই:

  • আমি একক স্পেস দিয়ে স্ট্রিংয়ের ভিতরে সাদা স্পেসের একাধিক উপস্থিতি প্রতিস্থাপন করতে চাই
  • ... এবং ... আমি স্ট্রিংয়ের শুরু বা শেষের অংশে সাদা স্থানগুলি চাই না (ছাঁটাই)

এর জন্য, আমি এই জাতীয় কোড ব্যবহার করি (কোডটিকে আরও কিছুটা পাঠযোগ্য করে তোলার জন্য প্রথম রেজিপেক্সের প্রথম বন্ধনীগুলি এখানে রয়েছে ... আপনি তাদের সাথে পরিচিত না হলে রেজেক্সপস ব্যথা হতে পারে):

s = s.replace(/^(\s*)|(\s*)$/g, '').replace(/\s+/g, ' ');

এটি কাজ করার কারণটি হ'ল স্ট্রিং-অবজেক্টের পদ্ধতিগুলি একটি স্ট্রিং অবজেক্ট ফেরত দেয় যার উপর আপনি অন্য পদ্ধতিটি আহ্বান করতে পারেন (ঠিক যেমন jQuery এবং কিছু অন্যান্য লাইব্রেরির মতো)। আপনি যদি পর পর এক একক বস্তুতে একাধিক পদ্ধতি চালনা করতে চান তবে কোডের আরও অনেক কমপ্যাক্ট উপায়।


"ব্যবহারের জন্য প্রস্তুত" উদাহরণের জন্য +1 .. আমি এটি আমার নিজের পোস্ট করতে চলেছি
d.raev

ঠিক আমি কী খুঁজছিলাম, দুর্দান্ত!
রবার্টপ

4

var x = "টেস্ট টেস্ট পরীক্ষা" .স্প্লিট ("") .জাইন (""); সতর্কতা (এক্স);


5
এটি কাজ করে তবে এটি স্মার্ট কোডিং নয়। এই কোডটি কোনও রেজিএক্সের চেয়ে ধীর। আমি ভাবছি যদি স্প্লিট () কোনও স্ট্রিং বিভক্ত করতে RegEx ব্যবহার না করে!
Farandole

2

এটা চেষ্টা কর.

var string = "         string             1";
string = string.trim().replace(/\s+/g, ' ');

ফলাফল হবে

string 1

এখানে যা ঘটেছিল তা হ'ল এটি প্রথমে বাইরের স্পেসগুলি ছাঁটাই করে প্রথমে trim()অভ্যন্তরীণ স্পেসগুলি ব্যবহার করে ট্রিম করবে .replace(/\s+/g, ' ')


0

আপনি যদি ব্যবহারকারীকে নামে ফাঁকা স্থান দিতে সীমাবদ্ধ রাখতে চান তবে কেবল একটি বিবৃতি তৈরি করুন এবং শর্ত দিন। আমি যেমন করেছি:

$j('#fragment_key').bind({
    keypress: function(e){
        var key = e.keyCode;
    var character = String.fromCharCode(key); 
    if(character.match( /[' ']/)) {
        alert("Blank space is not allowed in the Name");
        return false;
        }
    }
});
  • একটি JQuery ফাংশন তৈরি করুন।
  • এটি মূল প্রেস ইভেন্ট।
  • একটি পরিবর্তনশীল সূচনা।
  • চরিত্রের সাথে মেলে শর্ত দিন
  • আপনার মিলে যাওয়া অবস্থার জন্য একটি সতর্কতা বার্তা দেখান।

0

এটা কেমন?

"my test string \t\t with crazy stuff is cool ".replace(/\s{2,9999}|\t/g, ' ')

আউটপুট "my test string with crazy stuff is cool "

এটি যেকোন ট্যাব থেকে মুক্তিও পায়


ট্যাবগুলি ইতিমধ্যে কভার করা হয়েছে \s। অযথা জটিল রেজেেক্স, পাশাপাশি কেবল লিখতে পারে /\s+/g
এন্ডার্স রাবো থর্বেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.