स्ट्रिंग से संख्या कैसे निकालें?


84

मैं एक स्ट्रिंग से संख्याएँ निकालना चाहता हूँ:

questionText = "1 ding ?"

मैं संख्या 1संख्या और प्रश्न चिह्न को बदलना चाहता हूं ?। यह कोई भी संख्या हो सकती है। मैंने निम्नलिखित गैर-कार्य कोड की कोशिश की।

questionText.replace(/[0-9]/g, '');

3
वास्तव में क्या काम नहीं कर रहा है? क्योंकि यह संख्या को हटा रहा है ...
फेलिक्स क्लिंग

क्या आपको दशमलव के अंक भी निकालने होंगे?
ग्लोवोर्म्स

1
@Berbi यह प्रश्न डुप्लिकेट नहीं है। एक उद्धृत "रिप्लेसमेंट विधि काम नहीं करती" में एक उचित शीर्षक नहीं है ताकि एक उपयोगकर्ता टाइप कर सके और "स्ट्रिंग से संख्या को हटा सके"। खराब मॉडरेशन।
गिल्बर्टो एल्बिनो

जवाबों:


166

बहुत करीब, कोशिश:

questionText = questionText.replace(/[0-9]/g, '');

replaceमौजूदा स्ट्रिंग पर काम नहीं करता है, यह एक नया रिटर्न देता है। यदि आप इसका उपयोग करना चाहते हैं, तो आपको इसे रखने की आवश्यकता है!
इसी तरह, आप एक नए चर का उपयोग कर सकते हैं:

var withNoDigits = questionText.replace(/[0-9]/g, '');

एक बार में अंकों के पूरे ब्लॉक निकालने के लिए एक आखिरी ट्रिक, लेकिन वह बहुत दूर जा सकती है:

questionText = questionText.replace(/\d+/g, '');

क्या मैं बदल सकता हूँ? & * एक स्ट्रिंग से एक की जगह मेथोड जैसे str.replace (";, *", "");
किरन

वह काम नहीं कर रहा है, मैं दोनों को बदलना चाहता हूं? और * मेरी स्ट्रिंग में अंतरिक्ष के साथ
किरन

@किरण - उदाहरण के लिए \?,\*, उनसे बचना याद रखें , लेकिन आप शायद चाहते हैं /[?*]/g। जब आपके पास एक नया सवाल पूछने के लिए स्वतंत्र महसूस करें !
कोबी

11

स्ट्रिंग अपरिवर्तनीय है , इसीलिए questionText.replace(/[0-9]/g, '');यह अपने आप में काम करता है , लेकिन यह सवालटेक्ट-स्ट्रिंग को नहीं बदलता है। आपको दूसरे स्ट्रिंग-वेरिएबल को रिप्लेस करने या फिर खुद से सवाल करने का रिजल्ट असाइन करना होगा।

var cleanedQuestionText = questionText.replace(/[0-9]/g, '');

या 1 गो में ( \d+काबी का जवाब देखें)

 questionText = ("1 ding ?").replace(/\d+/g,'');

और यदि आप उस स्थान पर अग्रणी (और अनुगामी) स्थान को ट्रिम करना चाहते हैं, तो:

 questionText = ("1 ding ?").replace(/\d+|^\s+|\s+$/g,'');

/gसभी regexes पर मत भूलना - जावास्क्रिप्ट इस तरह से कष्टप्रद है:)
कोबी

9

आप उल्लेखनीय रूप से करीब हैं।

यहाँ प्रश्न में आपके द्वारा लिखा गया कोड है:

questionText.replace(/[0-9]/g, '');

आपके द्वारा लिखा गया कोड वास्तव में प्रश्नचिन्ह चर को देखता है, और आउटपुट का उत्पादन करता है जो मूल स्ट्रिंग है, लेकिन अंकों के साथ खाली स्ट्रिंग को प्रतिस्थापित किया जाता है।

हालाँकि, यह इसे स्वचालित रूप से मूल चर पर वापस नहीं भेजता है। आपको यह निर्दिष्ट करने की आवश्यकता है कि इसे क्या निर्दिष्ट करना है:

questionText = questionText.replace(/[0-9]/g, '');

1

बस जोड़ना चाहते हैं क्योंकि यह किसी के लिए ब्याज हो सकता है, कि आप समस्या के बारे में दूसरे तरीके से भी सोच सकते हैं। मुझे यकीन नहीं है कि अगर यहां रुचि है, लेकिन मुझे यह प्रासंगिक लगता है।

दूसरे तरीके से मेरा मतलब यह है कि "ऐसी किसी भी चीज़ को छीनो जो मैं नहीं खोज रहा हूँ, अर्थात यदि आप केवल 'डिंग' चाहते हैं तो आप कह सकते हैं:

var strippedText = ("1 ding?")। प्रतिस्थापित करना (/ [^ ^ a-zA-Z] / g, '');

जिसका मूल रूप से मतलब है "कुछ भी हटा दें जो nog a, b, c, d .... Z (कोई अक्षर) है।


1

एक माध्यमिक विकल्प कुछ अंकों के साथ गैर-अंकों का मिलान और वापसी करना होगा,

/\D+/g

जो प्रश्न में उस विशिष्ट स्ट्रिंग के लिए काम करेगा 1 ding ?

डेमो

परीक्षा

function non_digit_string(str) {
	const regex = /\D+/g;
	let m;

	non_digit_arr = [];
	while ((m = regex.exec(str)) !== null) {
		// This is necessary to avoid infinite loops with zero-width matches
		if (m.index === regex.lastIndex) {
			regex.lastIndex++;
		}


		m.forEach((match, groupIndex) => {
			if (match.trim() != '') {
				non_digit_arr.push(match.trim());
			}
		});
	}
	return non_digit_arr;
}

const str = `1 ding ? 124
12 ding ?
123 ding ? 123`;
console.log(non_digit_string(str));


यदि आप अभिव्यक्ति को सरल / संशोधित / संशोधित करना चाहते हैं, तो इसे regex101.com के ऊपरी दाएँ पैनल पर समझाया गया है । यदि आप चाहें, तो आप इस लिंक में भी देख सकते हैं कि यह कुछ नमूना आदानों के साथ कैसे मेल खाता है।


RegEx सर्किट

jex.im नियमित अभिव्यक्ति की कल्पना करता है:

यहाँ छवि विवरण दर्ज करें


0

यह किया जा सकता है regexजिसके बिना अधिक कुशल है:

var questionText = "1 ding ?"
var index = 0;
var num = "";
do
{
    num += questionText[index];
} while (questionText[++index] >= "0" && questionText[index] <= "9");
questionText = questionText.substring(num.length);

और एक बोनस के रूप में, यह संख्या को भी संग्रहीत करता है, जो कुछ लोगों के लिए उपयोगी हो सकता है।


0

आप .match && join () विधियों का उपयोग कर सकते हैं। .match () एक सरणी देता है और .join () एक स्ट्रिंग बनाता है

function digitsBeGone(str){
  return str.match(/\D/g).join('')
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.