जावास्क्रिप्ट का उपयोग करके स्ट्रिंग से अंतरिक्ष को छोड़कर सभी विशेष वर्णों को निकालें


158

मैं जावास्क्रिप्ट का उपयोग करके स्ट्रिंग से अंतरिक्ष को छोड़कर सभी विशेष पात्रों को निकालना चाहता हूं।

उदाहरण के लिए, abc's test#s आउटपुट के रूप में होना चाहिए abcs tests


3
आप विशेष चरित्र को कैसे परिभाषित करते हैं?
कीथ इरविन

जवाबों:


350

आपको एक एकल रेगेक्स के साथ स्ट्रिंग रिप्लेस फ़ंक्शन का उपयोग करना चाहिए। विशेष वर्णों की मानें, तो आपका मतलब कुछ भी है जो अक्षर नहीं है, यहां एक समाधान है:

const str = "abc's test#s";
console.log(str.replace(/[^a-zA-Z ]/g, ""));


5
गैर-लैटिन वर्णमाला पर इस समाधान का उपयोग करने के लिए कृपया इस उत्तर को देखें
efkan

यह भी संख्यात्मक पात्रों को हटा देगा!
tech_geek

15
@tech_geek आप कर सकते हैंstr.replace(/[^a-zA-Z0-9]/g, "")
विलियम्स

2
वास्तव में आपको इस str.replace(/[^a-zA-Z0-9 ]/g, "");सूचना की आवश्यकता है कि 0-9 और] के बीच एक स्थान है
अम्मार शाह

इसे कुछ ट्वीक की जरूरत है, इसने / या - कैरेक्टर को नहीं हटाया और कैमलकेस का पहला कैरेक्टर लोअर केस में होना चाहिए, लेकिन अपरकेस में यह एक है।
संसू

133

आप इसे उन पात्रों को निर्दिष्ट कर सकते हैं जिन्हें आप हटाना चाहते हैं:

string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');

वैकल्पिक रूप से, संख्याओं और अक्षरों को छोड़कर सभी वर्णों को बदलने के लिए, प्रयास करें:

string = string.replace(/[^a-zA-Z0-9]/g, '');

4
क्या होगा अगर मैं इस का उपयोग कर अंतरिक्ष को दूर नहीं करना चाहता? /[^a-zA-Z0-9]/g
अनादि

8
अंतरिक्ष रखने के लिए @ArbazAbid को केवल सफेद सूचीबद्ध वर्णों में जोड़ें। आपका रेगेक्स "/ [^ a-zA-Z0-9] / g" होगा (9 के बाद नोटिस
व्हाट्सएप

1
यह जवाब था कि काम किया है, अगर एक जगह की आवश्यकता है।
नाथन

इसके स्थान पर ()और whitespacesस्ट्रिंग में.text().replace(/[ ()]/g, '')
C Alonso C Ortega

30

पहला समाधान किसी भी UTF-8 वर्णमाला के लिए काम नहीं करता है। (यह पाठ को काट देगा जैसे कि Привіт)। मैं एक फ़ंक्शन बनाने में कामयाब रहा हूं जो RegExp का उपयोग नहीं करता है और जावास्क्रिप्ट इंजन में अच्छे UTF-8 समर्थन का उपयोग करता है। विचार सरल है अगर एक प्रतीक अपरकेस में बराबर है और लोअरकेस एक विशेष चरित्र है। एकमात्र अपवाद व्हॉट्सएप के लिए बनाया गया है।

function removeSpecials(str) {
    var lower = str.toLowerCase();
    var upper = str.toUpperCase();

    var res = "";
    for(var i=0; i<lower.length; ++i) {
        if(lower[i] != upper[i] || lower[i].trim() === '')
            res += str[i];
    }
    return res;
}

अद्यतन: कृपया ध्यान दें, यह समाधान केवल उन भाषाओं के लिए काम करता है जहाँ छोटे और बड़े अक्षर हैं। चीनी जैसी भाषाओं में, यह काम नहीं करेगा।

अद्यतन 2: मैं मूल समाधान के लिए आया था जब मैं एक फजी खोज पर काम कर रहा था। यदि आप खोज कार्यक्षमता को लागू करने के लिए विशेष वर्णों को निकालने का प्रयास कर रहे हैं, तो भी बेहतर तरीका है। किसी भी लिप्यंतरण लाइब्रेरी का उपयोग करें जो आपको केवल लैटिन वर्णों से स्ट्रिंग का उत्पादन करेगी और फिर सरल रेगेक्सप विशेष वर्णों को हटाने के सभी जादू करेगा। (यह चीनी के लिए भी काम करेगा और आप भी Tromsø== बनाकर साइड लाभ प्राप्त करेंगे Tromso)।


इस रचनात्मक समाधान के लिए धन्यवाद। यह वास्तव में काम करने वाली भाषाओं के अनुरूप बहुत अधिक है, क्योंकि हम में से कई "Привіт" या "specialøå" विशेष वर्णों पर विचार नहीं करते हैं। अधिकांश समाधान वहाँ किसी भी चरित्र को काटते हैं जो अंग्रेजी वर्णमाला का हिस्सा नहीं है।
एलेक्स लैंगबर्ग

1
मेरे लिए लगभग सही उत्तर है, लेकिन दुर्भाग्य से यह चीनी पात्रों को विशेष वर्ण मानता है।
एरिक मेजरस

@EricMajerus और हिंदी भी
प्रोग्रामर

सावधान रहें, यह संख्याओं को विशेष वर्ण भी मानता है।
just_user 15

11

मैं जावास्क्रिप्ट नहीं जानता, लेकिन क्या यह संभव नहीं है कि रेगेक्स का उपयोग किया जाए?

कुछ ऐसा [^\w\d\s]होगा जो अंकों, वर्णों और व्हाट्सएप से कुछ भी मेल खाएगा। यह जावास्क्रिप्ट में सिंटैक्स खोजने के लिए सिर्फ एक सवाल होगा।


1
stackoverflow.com/a/4374890/2384606 यह आपके प्रश्न का उत्तर है :)
कार्मेला

8

मैंने सीगुल के बहुत रचनात्मक समाधान की कोशिश की, लेकिन यह पाया कि यह संख्या विशेष पात्रों के रूप में भी व्यवहार करती है, जो मेरी आवश्यकताओं के अनुरूप नहीं थी। तो यहाँ है मेरा (विफल) सीगल के समाधान का ट्वीक ...

//return true if char is a number
function isNumber (text) {
  if(text) {
    var reg = new RegExp('[0-9]+$');
    return reg.test(text);
  }
  return false;
}

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

आप regअपने पहले समारोह में घोषणा करना भूल गए ।
नोमान अली

6

सभी नहीं खोजें (शब्द अक्षर || स्थान):

str.replace(/[^\w ]/, '')

1

इस एक का उपयोग करने की कोशिश करो

var result= stringToReplace.replace(/[^\w\s]/gi, '')

यहाँ ^ कैरेट नकारात्मकता के लिए w है [a-zA-Z0-9_] शब्द अक्षर और अंतरिक्ष के लिए \ / s / [] वैश्विक के लिए gi


0

डॉट (?) को विशेष नहीं माना जा सकता है। मैंने मोज़फ़ेट एंड सीगल के जवाब में एक शर्त जोड़ी है:

function isNumber (text) {
      reg = new RegExp('[0-9]+$');
      if(text) {
        return reg.test(text);
      }
      return false;
    }

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '') || (lower[i].trim() === '.')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

0

const input = `#if_1 $(PR_CONTRACT_END_DATE) == '23-09-2019' # 
Test27919<alerts@imimobile.com> #elseif_1 $(PR_CONTRACT_START_DATE) ==  '20-09-2019' #
Sender539<rama.sns@gmail.com> #elseif_1 $(PR_ACCOUNT_ID) == '1234' #
AdestraSID<hello@imimobile.co> #else_1#Test27919<alerts@imimobile.com>#endif_1#`;
const replaceString = input.split('$(').join('->').split(')').join('<-');


console.log(replaceString.match(/(?<=->).*?(?=<-)/g));


-11

जिनके विशेष वर्ण आप एक स्ट्रिंग से निकालना चाहते हैं, उनकी एक सूची तैयार करें और फिर उपयोगकर्ता जावास्क्रिप्ट को सभी विशेष वर्णों को हटाने के लिए फ़ंक्शन बदलें।

var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));

या आप पूरे स्ट्रिंग के लिए लूप चला सकते हैं और ASCII कोड के साथ एकल एकल वर्ण की तुलना कर सकते हैं और एक नया स्ट्रिंग पुनः प्राप्त कर सकते हैं।


9
नहीं, कृपया ऐसा न करें। यह वास्तव में बहुत धीमी है। नियमित अभिव्यक्ति का उपयोग करना बहुत बेहतर है।
कीथ इरविन

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

प्रतिस्थापित विधि का उपयोग करने के बजाय कई बार, केवल एक बार नियमित अभिव्यक्ति का उपयोग करके कृपया इसका उपयोग करें।
FAISAL
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.