2015-09-02 8 views
7

मेरे पास एक स्ट्रिंग मान है ("11112233")। मैं इस स्ट्रिंग को विभाजित करना चाहता हूं और इसे 3 अलग-अलग मानों में अलग करना चाहता हूं।पुनरावृत्ति पर आधारित स्ट्रिंग विभाजन

Val 1 = 1111 
val 2 = 22  
val 3 = 33 

मैं की तरह (/) वर्ण या अन्य प्रतीकों के साथ एक बहुत इसके संभावित खोज की है,। कुछ और, मेरा नंबर हमेशा अलग होता है, इसलिए मैं सटीक स्ट्रिंग दर्ज करके इसे विभाजित नहीं कर सकता।

var myVal = "11112233"; 
var lastVal = myVal.split(0 , 3); // split from index 0 till index 3 

कैसे मैं यह कर सकता: मैं कुछ इस तरह करना चाहते हैं?
धन्यवाद

+0

बस आप इस '11112233'.split (/ (1+ | 2+ | 3 +) /) की तरह कर सकते हैं। लेकिन regex सुधारों की आवश्यकता है – Raghavendra

उत्तर

15

इस नियमित अभिव्यक्ति का प्रयास करें:

'121112233'.match(/(\d)\1*/g) // ["1", "2", "111", "22", "33"] 

\1* का अर्थ है ", पिछले मैच के रूप में ही शून्य या अधिक बार"।

2

substr() फ़ंक्शन है।

आप की तरह आप अपने प्रश्न में लिखी गई जानकारी के लिए इसका इस्तेमाल कर सकते हैं:

var myVal = "11112233"; 
var lastVal = myVal.substr(0, 3); // "1111" 
+1

वास्तव में, सवाल यह है कि "इस तरह की कुछ चीज़" कहकर बहुत अस्पष्ट है। यह अभी भी एक वैध जवाब imho है। – mik01aj

+0

यह भी काम करता है। धन्यवाद। – Mehran

4

इस

myVal='11112233' 
myVal.match(/(\d)\1+/g); //["1111", "22", "33"] 
3

तरह की कोशिश करो आप इस को हल करने के ऑब्जेक्ट का उपयोग कर सकते हैं।

var str = '11112233'; 

var strObj = {}; 

for(var i = 0; i < str.length; i++){ 
    if(strObj[str[i]]) { 
     strObj[str[i]]+=str[i]; 
    } else { 
     strObj[str[i]] = str[i]; 
    } 
} 

for (var key in strObj) { 
    if (strObj.hasOwnProperty(key)) { 
    alert(key + " -> " + strObj[key]); 
    } 
} 

JsFiddle: https://jsfiddle.net/nikdtu/7qj3szo2/

+0

धन्यवाद। यह भी काम करता है। – Mehran

+0

यह समय और अंतरिक्ष जटिलता के मामले में अधिक कुशल होना चाहिए। –

+0

सुनिश्चित नहीं है: http://jsperf.com/regexp-vs-hardcoded, जहां तक ​​jsperf विश्वसनीय है: -D – leaf

2

जवाब ऊपर की मदद के लिए यहाँ समाधान है regex का उपयोग नहीं।

function partition(acc, value){ 

    var last = acc[acc.length-1]; 
    if(last && last[0] == value) acc[acc.length-1] += value; 
    else acc = acc.concat(value); 

    return acc; 
} 

var toInt = parseInt.bind(null, 10) 

var x = ([[]]).concat("112233".split('')) 
       .reduce(partition).map(toInt); 

// [11, 22, 33] 
संबंधित मुद्दे