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

जावास्क्रिप्ट के साथ, मैं फ़िल्टर सरणी विधि का उपयोग करना चाहता हूं (https://www. freecodecamp.org/challenges/filter-arrays-with-filter) सभी गैर अक्षरांकीय वर्णों के लिए एक सामान्य व्यंजक के साथ।

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

var newArray = oldArray.filter(function(val) {

return val !== /[\W_]/g;

});

क्या मै वह कर सकता हूं? मोज़िला गाइड में (https://developer.mozilla.org /en-US/docs/Web/JavaScript/Guide/Regular_Expressions) यह उल्लेख करता है कि आप रेगुलर एक्सप्रेशन का उपयोग प्रतिस्थापन के साथ कर सकते हैं, और मैं समझता हूं कि यह कैसे करना है, लेकिन इसमें फ़िल्टर का बिल्कुल भी उल्लेख नहीं है।

एक और कम सार उदाहरण रखने के लिए, यह वह कोड है जिस पर मैं काम कर रहा हूं:

function palindrome(str) {
  
  var splitStr = str.split("");
  
  var filterArray = splitStr.filter(function(val) {
    
    return val !== /[\W_]/g;
  });
  
  return filterArray;
}

palindrome("ey*e");

अगर मैं अभी तक काम कर रहा हूं, तो फ़ंक्शन ["ई", "वाई", "ई"] वापस आ जाना चाहिए। लेकिन यह ["ई", "वाई", "*", "ई"] लौटाता है (जैसे कि मैंने इसे बिल्कुल भी फ़िल्टर नहीं किया था)। मुझे आश्चर्य है कि क्या मैंने अपने कोड में कोई गलती की है, या यदि कोई नियमित अभिव्यक्तियों के साथ फ़िल्टर का उपयोग नहीं कर सकता है।

अगर ऐसा है तो क्यों? नियमित अभिव्यक्तियों के साथ फ़िल्टर का उपयोग क्यों नहीं कर सकता !? हमें इसके बजाय प्रतिस्थापन का उपयोग क्यों करना है?

0
Milena 20 अप्रैल 2018, 20:58

2 जवाब

सबसे बढ़िया उत्तर

यह वास्तव में .filter() से संबंधित कोई समस्या नहीं है, यह सिर्फ इतना है कि आप अपनी नियमित अभिव्यक्ति के विरुद्ध अपनी स्ट्रिंग का ठीक से परीक्षण नहीं कर रहे हैं।

रेगुलर एक्सप्रेशन के विरुद्ध स्ट्रिंग का परीक्षण करने के लिए आप .test() विधि:

function palindrome(str) {
  
  var splitStr = str.split("");
  
  var filterArray = splitStr.filter(function(val) {
    
    // Test the string against the regular expression
    // and test for no match (whole thing is preceeded by !)
    return !/[\W_]/g.test(val);
  });
  
  return filterArray;
}

console.log(palindrome("ey*e"));
1
Scott Marcus 20 अप्रैल 2018, 21:02

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

function palindrome(str) {
  return str.match(/[a-zA-Z0-9]/g) || [];      
}

let chars = palindrome("ey*e");
console.log(chars);

प्रयुक्त रेगेक्स के बारे में: \W [^\w] या [^a-zA-Z0-9_] जैसा ही है। तो, नहीं [\W_] [a-zA-Z0-9] के बराबर है।

0
Thomas 20 अप्रैल 2018, 21:16