2013-10-10 9 views
7

द्वारा स्ट्रिंग से दोहराए गए वर्णों को हटा दें मुझे नियमित अभिव्यक्तियों का उपयोग करके स्ट्रिंग से दोहराए गए वर्णों को निकालने का एक तरीका मिला है।रेगेक्स जावास्क्रिप्ट

function RemoveDuplicates() { 
    var str = "aaabbbccc"; 
    var filtered = str.replace(/[^\w\s]|(.)\1/gi, ""); 
    alert(filtered); 
} 

आउटपुट: abc इस ठीक काम कर रहा है।

लेकिन str = "aaabbbccccabbbbcccccc" तो आउटपुट abcabc है। क्या केवल अनन्य वर्ण प्राप्त करने या सभी डुप्लिकेट को हटाने का कोई तरीका है? अगर कोई रास्ता है तो कृपया मुझे बताएं।

+0

आदेश फ़र्क पड़ता है? दूसरे शब्दों में, क्या यह आवश्यक है कि चरित्र की पहली घटना वह है जिसे आप बचाते हैं? –

+0

मैं डुप्लिकेट को हटाने के बाद एक ही अनुक्रम में वर्ण चाहता हूं। केवल अद्वितीय एक। –

उत्तर

22

ए ', यह कुछ के द्वारा पीछा किया और इस "की तरह अग्रावलोकन:

var str = "aaabbbccccabbbbcccccc"; 
str.replace(/(.)(?=.*\1)/g, ""); // "abc" 

ध्यान दें कि यह बरकरार रखता है पिछले हर किरदार की घटना:

var str = "aabbccxccbbaa"; 
str.replace(/(.)(?=.*\1)/g, ""); // "xcba" 

regexes के बिना, संरक्षण आदेश:

var str = "aabbccxccbbaa"; 
str.split("").filter(function(x, n, s) { return s.indexOf(x) == n }).join(""); // "abcx" 
+0

मैंने माइक से पूछा लेकिन उसने अभी तक जवाब नहीं दिया है। आपका समाधान वह है जिसे मैं साथ चला गया था, और यदि आपको आदेश को संरक्षित करने की आवश्यकता है, तो 'str.split ("") नहीं होगा।() "(" ") चाल चलाना? इस कोड को चलाकर –

+1

... स्ट्रिंग एक ही seqeunce में नहीं आ रहा है। अगर var str = "aaabbbcccaabbbcccaaaaaaaasa"; आउटपुट = "बीसीएसए" लेकिन मुझे एबीसी –

+0

@ लिंड्रियन जैसे कुछ चाहिए: हाँ, वह, या http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript से कुछ अन्य विधि – georg

3

यह एक पुरानी खोज है एन, लेकिन ईएस 6 में हम Sets का उपयोग कर सकते हैं। कोड इस तरह दिखता है:

var test = 'aaabbbcccaabbbcccaaaaaaaasa'; 
 
var result = Array.from(new Set(test)).join(''); 
 

 
console.log(result);

संबंधित मुद्दे