जावास्क्रिप्ट: एक स्ट्रिंग में कितनी बार एक चरित्र होता है?


89

क्या एक स्ट्रिंग में कितनी बार एक चरित्र प्रकट होता है यह जांचने का एक सरल तरीका है?



जवाबों:


76

आप स्ट्रिंग में किसी अन्य वर्ण को निकाल सकते हैं और लंबाई की जांच कर सकते हैं:

str.replace(/[^a]/g, "").length

यहाँ यह गिना जाता है कि कितने aएस हैं str


1
केवल यह इंगित करना चाहते हैं कि आप अपरकेस के रूप में अच्छी तरह से कर सकते हैं let xLength = str.replace(/[^a || A]/g, "").length;
HappyHands31

@ HappyHands31 आपका मतलब हैlet xLength = str.replace(/[^aA]/g, "").length;
डोनाल्ड डक

43

यह a निम्न उदाहरण में गिना जाता है:

str = "A man is as good as his word";
alert(str.split('a').length-1);

यदि आप केस असंवेदनशील चाहते हैं तो आप कुछ ऐसा चाहते हैं

alert(str.split( new RegExp( "a", "gi" ) ).length-1);

इतना है कि यह "ए" और "ए" ... "जी" ध्वज की वास्तव में आवश्यकता नहीं है, लेकिन आपको "i" ध्वज की आवश्यकता है


1
@ जोश इस पर निर्भर करता है कि सभी को क्या पसंद है। उदाहरण के लिए मुझे यह उत्तर पसंद है क्योंकि इसे पढ़ना आसान है। लेकिन कोई और व्यक्ति इसके लिए एक और जवाब पसंद करेगा, यह अधिक तकनीकी या चुनौतीपूर्ण है, कोई अन्य व्यक्ति एक और उत्तर पसंद करेगा क्योंकि यह कम सीपीयू और इतने पर खा रहा है .. यही कारण है कि जावास्क्रिप्ट इतना अच्छा है, स्वतंत्रता का स्वाद।
vdegenne

18

एक स्ट्रिंग में "a" s की संख्या की गणना करने के लिए एक RegEx का उपयोग करें।

var string = 'aajlkjjskdjfAlsj;gkejflksajfjskda';

document.write(string.match(/a/gi).length);

मुझे समझाएं कि यह कैसे काम करता है:

string.matchयह एक RegEx विधि है। यह निर्दिष्ट स्ट्रिंग के अंदर निर्दिष्ट RegEx (इस मामले में, स्ट्रिंग "स्ट्रिंग") की खोज करता है।

(/a/gi)यह वास्तविक RegEx है। यह पढ़ता है, "चरित्र को ढूंढें।" यह बहुत सरल है। इसमें दो झंडे, "जी" और "आई" भी हैं। "जी" चरित्र "ए" के सभी घटनाओं को खोजने के लिए कहता है। अन्यथा यह केवल पहले वाले को खोजेगा, और यह कभी भी नंबर एक को नहीं गिना जाएगा। दूसरा झंडा "i" है। यह RegEx को उस चरित्र के सभी मामलों से मेल खाता है। यदि वह ध्वज (i) नहीं था, तो ऊपर दिया गया कोड केवल 4 गिना जाएगा, क्योंकि यह स्ट्रिंग में "A" को ऊपर ले जाएगा। "I" के कारण, यह ऊपरी और निचले मामले से मेल खाएगा । यदि आप पत्र मामले से मेल खाना चाहते हैं तो "i" को हटा दें।

string.matchसभी मैचों की एक सरणी देता है, इसलिए हम lengthसरणी प्रविष्टियों की संख्या को पुनः प्राप्त करने के लिए विधि का उपयोग करते हैं। इतना ही आसान!


मुझे लगता है कि आपको i को gi से हटा देना चाहिए, यह त्रुटियों का स्रोत है। आप इसे एक बोनस के रूप में जोड़ सकते हैं, लेकिन मेरे मामले में मैं विशेष रूप से केस संवेदनशील मैच के लिए देख रहा था।
जिस्मो राणा

1
यहाँ समस्या यह है कि यदि आपके पास " a" नहीं है string, तो string.match(/a/gi)बराबर है nullऔर आपको त्रुटि मिली है Cannot read property 'length' of null
pbialy

1
'जी' भाग बहुत मददगार था, सर @ डेजाहा
जेसन सेब्रिंग

11

मेरी राय में इस मामले में नियमित अभिव्यक्ति से बचने के लिए यह अधिक सुविधाजनक और सुरक्षित है

ऐसा इसलिए है क्योंकि यदि हम किसी भी प्रकार के पात्रों को गिनना चाहते हैं तो हमें दो भावों पर विचार करने की आवश्यकता है। के लिए एक आम अक्षर और के लिए दूसरा विशेष की तरह उदाहरण के लिए वर्ण [, ], ^और इतने पर। इसके बारे में भूलना आसान है, लेकिन फिर भी अगर हम इसे याद रखते हैं, तो मुझे लगता है कि हम अनावश्यक रूप से अपने कोड का विस्तार कर रहे हैं।

में इस मामले स्ट्रिंग के लिए strऔर चरित्र chइन समाधानों में से प्रत्येक काम करता है:

let count = str.split(ch).length - 1

( @ सरफराज को धन्यवाद )

या

let count = str.split('').filter(x => x == ch).length

या

let count = 0
str.split('').forEach(x => x == ch ? count++ : null)

का आनंद लें!



1
var a = "acvbasbb";
var b= {};
for (let i=0;i<a.length;i++){
    if((a.match(new RegExp(a[i], "g"))).length > 1){
        b[a[i]]=(a.match(new RegExp(a[i], "g"))).length;
    }
}
console.log(b);

1
यद्यपि आपका कोड स्निपेट समस्या को हल कर सकता है, आपको यह वर्णन करना चाहिए कि आपके कोड का उद्देश्य क्या है (यह समस्या को हल कैसे करता है)। इसके अलावा, आप stackoverflow.com/help/how-to-answer
Ahmad F

@ एमाडफ आप इसके लिए उपयोग कर सकते हैं> एक ​​स्ट्रिंग में कितनी बार एक चरित्र होता है। और जब आप इस स्क्रिप्ट को चलाते हैं तो आपको गुणों (वर्णों) के साथ एक वस्तु मिलेगी जो एक बार फिर अधिक होती है।
नितिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.