2012-09-09 23 views
11

सब कुछ कैसे निकालें लेकिनस्ट्रिंग से अक्षरों, संख्याओं, स्थान, विस्मयादिबोधक और प्रश्न चिह्न के अलावा सब कुछ कैसे निकालें?

अक्षरों, संख्याओं, रिक्त स्थान, विस्मयादिबोधक चिह्न, एक स्ट्रिंग से प्रश्न चिह्न?

यह महत्वपूर्ण है कि विधि अंतरराष्ट्रीय भाषाओं (यूटीएफ -8) का समर्थन करे।

+1

आप अभिव्यक्ति की अनुमति के लिए चाहते हैं, या निकालने के लिए, वर्ण: अगर निर्दिष्ट किया जाता है, यह इस वापस आ जाएगी 'A',' é' और 'è' (और इतने पर ...)? –

उत्तर

25

आप उपयोग कर सकते हैं regex

myString.replace(/[^\w\s!?]/g,''); 

यह सब कुछ है, लेकिन एक शब्द चरित्र, अंतरिक्ष, विस्मयादिबोधक चिह्न, या प्रश्न की जगह लेगा।

Character Class: "शब्द चरित्र", आमतौर पर [A-Za-z0-9_] के लिए खड़ा है \w। अंडरस्कोर और अंकों को शामिल करने पर ध्यान दें।

\s "व्हाइटस्पेस चरित्र" के लिए खड़ा है। इसमें [ \t\r\n] शामिल है।

यदि आप अंडरस्कोर नहीं चाहते हैं, तो आप केवल [A-Za-z0-9] का उपयोग कर सकते हैं।

myString.replace(/[^A-Za-z0-9\s!?]/g,''); 

यूनिकोड वर्णों के लिए, आप अभिव्यक्ति में \u0000-\u0080 जैसे कुछ जोड़ सकते हैं। वह उस यूनिकोड रेंज के भीतर सभी पात्रों को बाहर कर देगा। आपको अक्षरों के लिए सीमा निर्दिष्ट करना होगा हटाएं नहीं चाहते हैं। आप Unicode Map पर सभी कोड देख सकते हैं। बस उन अक्षरों में जोड़ें जिन्हें आप रखना चाहते हैं या वर्णों की एक श्रृंखला।

उदाहरण के लिए:

myString.replace(/[^A-Za-z0-9\s!?\u0000-\u0080\u0082]/g,''); 

यह सब पहले उल्लेख पात्रों की अनुमति देगा, \u0000-\u0080 और \u0082 से रेंज। यह \u0081 हटा देगा।

+0

बस एक विचार है, लेकिन क्या वह अंडरस्कोर चरित्र में भी नहीं जाता है? –

+0

और विस्मयादिबोधक? यह अंतरराष्ट्रीय अक्षरों को हटा देता है ... –

+0

@tomaszs मैंने उस पते का जवाब अपडेट कर दिया है। – sachleen

1

आप की तरह एक नियमित अभिव्यक्ति के साथ की कोशिश कर सकते हैं: var cleaned = someString.replace(/[^a-zA-Z0-9! ]+/g, "");

+0

मुझे लगता है कि आपने रेगेक्स से 'जी' ध्वज छोड़ा है। – jfriend00

+0

ओपीएस ... धन्यवाद, मैंने जवाब संपादित कर लिया है। – rcdmk

3

दोनों उत्तर अब तक प्रश्न चिह्न छोड़ दिया गया है। मैं उन पर टिप्पणी करूंगा, लेकिन अभी तक पर्याप्त प्रतिनिधि नहीं है।

डेविड सही है, sachleen regex पीछे अंडरस्कोर छोड़ देगा। आरसीडीएमके का रेगेक्स, निम्नानुसार संशोधित है, चाल करेगा, हालांकि यदि आप अंतरराष्ट्रीय पात्रों की परवाह करते हैं तो चीजें बहुत जटिल हो सकती हैं।

var result = text.replace(/[^a-zA-Z0-9\s!?]+/g, ''); 

यह नई लाइनों और टैब के साथ-साथ रिक्त स्थान के पीछे छोड़ देगा।आप के रूप में अच्छी तरह से नई लाइनों और टैब से छुटकारा पाने चाहते हैं, यह करने के लिए बदलने के लिए:

var result = text.replace(/[^a-zA-Z0-9 !?]+/g, ''); 
+0

और * अब *, आप * टिप्पणियां छोड़ सकते हैं! =) –

+0

लॉल, धन्यवाद! :) – Kelvin

+0

याद रखें, हालांकि: महान शक्ति के साथ महान आता है ... * ओह, चमकदार! * –

2
text = "A(B){C};:a.b*!c??!1<>[email protected]#3" 
result = text.replace(/[^a-zA-Z0-9]/g, '') 

लौट चाहिए ABCabc123

सबसे पहले, हम A B C a b c 1 2 3 के रूप में लेकिन यादृच्छिक पात्रों सेट के साथ पाठ को परिभाषित result के रूप में:

text.replace(...) जहां पैरामीटर हैं:

/.../g, /.../: ^ का मतलब है रिवर्स; सभी मैचों सिर्फ पहली नहीं दूर करने के लिए

a-z (छोटे अक्षरों), A-Z (बड़े अक्षरों) और 0-9 (अंक)

g वैश्विक मतलब है,: पत्र जो कर रहे हैं दूर करने के लिए नहीं मैच

दूसरा पैरामीटर प्रतिस्थापन चरित्र है, हम से इसे एक खाली स्ट्रिंग पर नहीं है ताकि यह निर्दिष्ट स्ट्रिंग को रख सके। जैसे "A B C a b c 1 2 3"