मेरे पास एक स्ट्रिंग है जिसमें संख्याएं और गणित ऑपरेटर हैं (+,x,-, /) इसमें मिश्रित

'12+345x6/789'

मुझे इसे उन गणित ऑपरेटरों द्वारा अलग किए गए सरणी में परिवर्तित करने की आवश्यकता है।

[12, +, 345, x, 6, /, 789]

ऐसा करने का एक आसान तरीका क्या है?

1
Vincent Tang 29 मार्च 2018, 03:59

3 जवाब

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

लगातार गैर-अंक वर्ण \D+ पर बंटने से आपको मिलता है

console.log ('12+345x6/789'.split (/\D+/))
// [ '12', '345', '6', '789' ]

अगर आप एक कैप्चर ग्रुप जोड़ते हैं, तो (\D+) आपको सेपरेटर भी मिलता है

console.log ('12+345x6/789'.split (/(\D+)/))
// [ "12", "+", "345", "x", "6", "/", "789" ]

यदि आप दशमलव को पार्स करने का समर्थन करना चाहते हैं, तो regexp को /([^0-9.]+)/ में बदलें - ध्यान दें, ऊपर इस्तेमाल किया गया \D [^0-9] के बराबर है, इसलिए हम यहां केवल . जोड़ रहे हैं। चरित्र वर्ग के लिए

console.log ('12+3.4x5'.split (/([^0-9.]+)/))
// [ "12", "+", "3.4", "x", "5" ]

और आपके बाकी प्रोग्राम को लिखने का एक संभावित तरीका

const cont = x =>
  k => k (x)

const infix = f => x =>
  cont (f (x))

const apply = x => f =>
  cont (f (x))

const identity = x =>
  x

const empty =
  Symbol ()
  
const evaluate = ([ token = empty, ...rest], then = cont (identity)) => {
  if (token === empty) {
    return then
  }
  else {
    switch (token) {
      case "+":
        return evaluate (rest, then (infix (x => y => x + y)))
      case "x":
        return evaluate (rest, then (infix (x => y => x * y)))
      case "/":
        return evaluate (rest, then (infix (x => y => x / y >> 0)))
      default:
        return evaluate (rest, then (apply (Number (token))))
    }
  }
}

const parse = program =>
  program.split (/(\D+)/)
  
const exec = program =>
  evaluate (parse (program)) (console.log)

exec ('')             // 0
exec ('1')            // 1
exec ('1+2')          // 3
exec ('1+2+3')        // 6
exec ('1+2+3x4')      // 24
exec ('1+2+3x4/2')    // 12
exec ('12+345x6/789') // 2
2
Thank you 23 अप्रैल 2018, 02:48

यह काम करने जा रहा है

console.log('12+345x6/789'.match(/\D+|\d+/g))
1
xianshenglu 29 मार्च 2018, 01:10

यदि आप व्हॉट्सएप से असंबद्ध हैं, तो आपको बस इतना ही चाहिए

'12+345x6/78-9'.match(/\d+|[\+-\/x]/g);

जो स्ट्रिंग को संख्याओं और +, -, \, और x टोकन में विभाजित करता है।

'use strict';
const tokens = '12+345x6/78-9'.match(/\d+|[\+-\/x]/g);

console.log(tokens);

व्हाइटस्पेस को संभालने के लिए, विचार करें

'12+3 45 x6/78-9'.match(/\d|\d[\s\d]\d|[\+-\/x]/g);

जो स्ट्रिंग को संख्याओं में विभाजित करता है (वैकल्पिक रूप से व्हाइटस्पेस को एक संख्या के भीतर अंक विभाजक के रूप में अनुमति देता है) और +, -, \, और x

'use strict';
const tokens = '12+3 45 x6/78-9'.match(/\d+\s?\d+|\d+|[\+-\/x]/g);


console.log(tokens);
2
Aluan Haddad 29 मार्च 2018, 01:51