जावास्क्रिप्ट स्ट्रिंग में एकल व्हाट्सएप के साथ कई व्हाट्सएप को बदलें


191

मेरे पास अतिरिक्त व्हाट्सएप के साथ तार हैं, हर बार केवल एक व्हाट्सएप से अधिक मैं चाहता हूं कि यह केवल एक ही हो।

किसी को? मैंने Google को खोजने की कोशिश की, लेकिन मेरे लिए कुछ भी काम नहीं किया।

धन्यवाद


2
डुप्लिकेट व्हाट्सएप को अंत / शुरुआत या पाठ में कहीं से भी हटा दें?
नवजागेको

जवाबों:


371

कुछ इस तरह:

var s = "  a  b     c  ";

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


31
@ कृपया कृपया ध्यान से प्रश्न पढ़ें: "हर बार केवल एक व्हाट्सएप से अधिक मैं इसे केवल एक ही होना चाहूंगा"।
bjornd

5
क्या यह स्पष्ट नहीं है? यह 1 व्हॉट्सएप चार के साथ 1 से अधिक व्हाट्सएप चार की जगह लेता है। (वांछित परिणाम)
युद्ध

4
@CiaranG यह एक नियमित
एक्सप्रेशन है

1
@Wardy, करीब :-) यह एक या अधिक को एक स्थान से बदल देता है (लेकिन वास्तव में, वांछित परिणाम)।
ग्रीनोल्डमैन

1
क्या होगा यदि कोई एक ही तरह के व्हाट्सएप से 1+ व्हाट्सएप को बदलना चाहे? (जैसे एक स्थान के साथ 2+ रिक्त स्थान और एक नई रेखा के साथ 3 नई रेखाएँ, आदि) अगर वहाँ दोनों newlines और रिक्त स्थान हैं तो इसे एक नई पंक्ति से बदलना होगा जबकि यदि दोनों स्थान और टैब हैं तो इसे एक से बदलना होगा अंतरिक्ष
टॉम

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
मानक वस्तु का प्रोटोटाइप संवर्धित करना वास्तव में विवादास्पद पैटर्न है। मैं इस तरह के मूल प्रश्न के लिए इसकी अनुशंसा नहीं करूंगा।
bjornd

@XavierJohn यह String है, R के साथ, स्टिंग नहीं।
लासगनाएंड्रॉइड

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

मुझे लगता है कि आप स्ट्रिंग की शुरुआत और / या अंत से रिक्त स्थान देख रहे हैं (बजाय सभी रिक्त स्थान को हटाने के ?

अगर ऐसा है, तो आपको इस तरह एक regex की आवश्यकता होगी:

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

यह स्ट्रिंग की शुरुआत या अंत से सभी रिक्त स्थान को हटा देगा। यदि आप केवल अंत से रिक्त स्थान को ट्रिम करना चाहते हैं, तो रेगेक्स इस तरह दिखाई देगा:

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

उम्मीद है की वो मदद करदे।


4
मुझे आपके regex, @Spudley की सादगी पसंद है, लेकिन क्या आपका कोड शुरुआत और अंत में व्हाट्सएप के रन को सिंगल स्पेस कैरेक्टर से नहीं बदलेगा? मुझे लगा कि लक्ष्य पूरी तरह से छोर से व्हॉट्सएप को हटाने का था, इस मामले में प्रतिस्थापन स्ट्रिंग के ''बजाय होना चाहिए ' '
Randall कुक

8

jQuery.trim () अच्छा काम करता है।

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


14
बस याद रखें कि यह सभी व्हाट्सएप को नहीं हटाता है। डॉक्स का हवाला देते हुए: " एक स्ट्रिंग की शुरुआत और अंत से व्हाट्सएप को हटा दें ।"
जोनीक

6

मुझे पता है कि मुझे किसी विषय पर नेक्रोमेंसी नहीं करनी चाहिए, लेकिन प्रश्न का विवरण देते हुए, मैं आमतौर पर इसका मतलब करने के लिए विस्तार करता हूं:

  • मैं एक ही स्थान के साथ स्ट्रिंग के अंदर व्हाट्सएप की कई घटनाओं को बदलना चाहता हूं
  • ... और ... मैं स्ट्रिंग (ट्रिम) के शुरुआती या अंत में व्हाट्सएप नहीं चाहता

इसके लिए, मैं इस तरह कोड का उपयोग करता हूं (पहले regexp पर कोष्ठक कोड को थोड़ा अधिक पठनीय बनाने के लिए बस वहां हैं ... regexps एक दर्द हो सकता है जब तक कि आप उनसे परिचित न हों):

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

इसका कारण यह है कि स्ट्रिंग-ऑब्जेक्ट पर विधियाँ एक स्ट्रिंग ऑब्जेक्ट लौटाती हैं, जिस पर आप किसी अन्य विधि (जैसे jQuery और कुछ अन्य लाइब्रेरी) को लागू कर सकते हैं। यदि आप उत्तराधिकार में किसी एकल ऑब्जेक्ट पर कई विधियों को निष्पादित करना चाहते हैं तो कोड के लिए अधिक कॉम्पैक्ट तरीका।


+1 "उपयोग के लिए तैयार" उदाहरण के लिए .. मैं इसे अपना स्वयं पोस्ट करने जा रहा था
d.raev

वास्तव में मैं क्या देख रहा था, भयानक!
रॉबर्ट

4

var x = "टेस्ट टेस्ट टेस्ट" .plplit ("") .join (""); चेतावनी (x);


5
यह काम करता है लेकिन यह स्मार्ट कोडिंग नहीं है। यह कोड एक RegEx की तुलना में धीमा है। मुझे आश्चर्य है कि अगर स्प्लिट () स्ट्रिंग को विभाजित करने के लिए RegEx का उपयोग नहीं करता है!
फरान्डोल

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
एंडर्स राबो थोरबेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.