2012-10-22 15 views
23

का उपयोग करके अंडरस्कोर के साथ प्रतिस्थापित करें, मैं स्ट्रिंग से सभी विशेष वर्ण और रिक्त स्थान को हटाना चाहता हूं और अंडरस्कोर के साथ प्रतिस्थापित करना चाहता हूं। स्ट्रिंग हैविशेष प्रतीकों और अतिरिक्त रिक्त स्थान हटाएं और प्रतिस्थापन विधि

var str = "hello world & hello universe"; 

मैं इस अब जो केवल रिक्त स्थान

 str.replace(/\s/g, "_"); 

परिणाम मैं hello_world_&_hello_universe है बदल देता है, लेकिन मैं रूप में अच्छी तरह विशेष प्रतीकों को दूर करना चाहते हैं।

मैंने इस str.replace(/[^a-zA-Z0-9]\s/g, "_") को आजमाया लेकिन इससे मदद नहीं मिलती है।

उत्तर

50

आपकी नियमित अभिव्यक्ति [^a-zA-Z0-9]\s/g कहती है कि किसी भी चरित्र से मिलान करें जो किसी स्थान या उसके बाद कोई स्थान नहीं है।

\ n को हटाएं और यदि आप प्रत्येक विशेष चरित्र के लिए _ चाहते हैं तो आपको यह प्राप्त करना चाहिए।

var newString = str.replace(/[^A-Z0-9]/ig, "_"); 

कि hello_world___hello_universe

में परिणाम होगा कि आप इसे एक अंडरस्कोर कई मैच के लिए एक + का उपयोग

var newString = str.replace(/[^A-Z0-9]+/ig, "_"); 

कि hello_world_hello_universe

2

अपने नए रेगेक्स से \s हटाएं और इसे काम करना चाहिए - व्हाइटस्पेस पहले से ही "कुछ भी लेकिन अल्फान्यूमेरिक्स" में शामिल है।

ध्यान दें कि ] के बाद आप + जोड़ना चाहते हैं, इसलिए आपको एक से अधिक अंडरस्कोर के अनुक्रम नहीं मिलते हैं। स्ट्रिंग के प्रारंभ या अंत में अंडरस्कोर को ट्रिम करने के लिए आप .replace(/^_+|_+$/g,'') पर भी चेन कर सकते हैं।

+0

क्यों अलग फोन में 'की जगह परिणाम होगा होना चाहते हैं 'जब आप पहले regex में '+' जोड़ सकते हैं? – MBO

+0

क्योंकि ... अच्छा बिंदु। मैं कुछ और सोच रहा था, मुझे लगता है। फिर भी, आप 'ट्रिम' जैसी रेगेक्स पर श्रृंखला बना सकते हैं। –

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