2013-06-13 4 views
8

के अंत में एक नंबर से मेल खाता है I regex का उपयोग करके स्ट्रिंग के अंत में किसी नंबर से मिलान करने का प्रयास कर रहा हूं। उदाहरण के लिए, स्ट्रिंग की तरह लग सकता है:RegEx स्ट्रिंग

var foo = '101*99+123.12'; // would match 123.12 
var bar = '101*99+-123'; // would match -123 
var str = '101*99+-123.'; // would match -123. 

यह मैं अब तक क्या मिल गया है, लेकिन यह पूरी स्ट्रिंग के मिलान अगर कोई दशमलव बिंदु है लगते हैं:

foo.match(/\-?\d+.?\d+?$/); 

मैं ले इसका मतलब यह है:

  • \-?: वैकल्पिक "-" प्रतीक
  • \d+: 1 या अधिक अंकों
  • .?: वैकल्पिक दशमलव बिंदु
  • \d+?: दशमलव बिंदु
  • $ के बाद वैकल्पिक 1 या अधिक अंकों: स्ट्रिंग

मैं क्या याद आ रही है के अंत में मैच?

+3

पर वास्तव में, कुछ की कोशिश कर अपना काम दिखा रहा है, और समझा के लिए धन्यवाद। यह बेहतर हो सकता है यदि कोई jsFiddle शामिल था, लेकिन भिखारी choosers नहीं हो सकता ... :) एक त्वरित नोट - 're' का अर्थ है" किसी भी चरित्र "(मूल रूप से)," अवधि "नहीं; मुझे लगता है कि आपको इसे बचाना चाहिए, \ '? '' होना चाहिए। यह एकमात्र समस्या नहीं हो सकती है, रेगेक्स – Ian

+1

वाह के आपके विवरण में मैंने जो कुछ देखा है, देखो ... ओपी प्रयास करते समय सबसे आसान सवाल कैसे उठाता है। चीयर्स! – jahroy

+0

क्या स्ट्रिंग हमेशा 'x * y + z' की तरह दिखाई देगी? – Xotic750

उत्तर

3

. किसी भी चरित्र से मेल खाता है। ,

-?   // optional minus sign 
\d+   // one or more digits 
\.?   // optional . 
\d*   // zero or more digits 

आप MDN's regex page पर देख सकते हैं, +? 1 या अधिक की एक गैर लालची मुकाबला नहीं है: आप के रूप में \.

यह से बचने के लिए की जरूरत है इस प्रयास करें:

/-?\d+\.?\d*$/ 

यही कारण है 1 या उससे अधिक का वैकल्पिक मिलान नहीं।

+0

ओह, मुझे एहसास नहीं हुआ कि मुझे '.' से बचने की जरूरत है। मुझे लगता है कि '+?' अंतिम अंक मिलान का जिक्र कर रहा है? – Phil

+0

क्या आपने मेरा जवाब चुरा लिया? –

+2

@ विटिम.स - (_in मामले में आप मजाक नहीं कर रहे हैं) उसने आपके जवाब को चुराया नहीं: उसने आपके सामने जवाब दिया और उसके बाद से उसका जवाब संपादित नहीं किया है। टिप्पणियों के आधार पर, ऐसा लगता है कि उसने आपके उत्तर को ठीक करने में मदद की, इसलिए मुझे आशा है कि आप बस मजाक कर रहे हैं। – jahroy

0

कई मुद्दों:

  • ओर टिप्पणी: पानी का छींटा भाग निकले जाने की जरूरत नहीं है; यह केवल चरित्र वर्गों में विशेष है (उदा। [a-z])।
  • डॉट विशेष है; इसका मतलब है "किसी भी चरित्र से मेल खाता है"। आप इसे से बचाना चाहते हैं: \.
  • \d+? वास्तव में इसका मतलब है: कम से कम एक अंक से मेल खाता है, लेकिन यदि पैटर्न के उस हिस्से के बाद रेगेक्स चला जाता है, तो जितनी जल्दी हो सके शेष रेगेक्स से मिलान करने का प्रयास करें ("lazy" या "गैर लालची मिलान")। आपके मामले में यह ? बस कुछ भी नहीं करता है। उन अंकों को वास्तव में वैकल्पिक बनाने के लिए, \d* का उपयोग करें।
  • अंत में, आप दशमलव बिंदु और बाद में अंक एक समूह के रूप वैकल्पिक बनाने के लिए चाहते हो सकता है: (\.\d+)?

कार्यकारी सारांश: /-?\d+(\.\d+)?$/

0

यह काम करना चाहिए /-?\d+\.?\d*$/

result = subject.match(/-?\d+\.?\d*$/mg); 

enter image description here enter image description here

+0

वह पिछली दशमलव बिंदु के साथ ओपी के तीसरे मामले से मेल नहीं खाएगा। इसके अलावा (उनके पहले उदाहरण से) वे '+' से मेल नहीं खाते हैं। – nnnnnn

+0

@nnnnnn ops ... निश्चित –

+2

नियमित अभिव्यक्ति का विश्लेषण करने के लिए आपने क्या उपयोग किया? – MaxArt

0

यदि पैटर्न हमेशा x*y+z है तो आप इसे वैकल्पिक रूप से बिना किसी रेगेक्स के कर सकते हैं।

var foo = '101*99+123.12'; // would match 123.12 
var bar = '101*99+-123'; // would match -123 
var str = '101*99+-123.'; // would match -123. 

function getLastNumber(string) { 
    return string.split("+")[1]; 
} 

console.log(getLastNumber(foo)); 
console.log(getLastNumber(bar)); 
console.log(getLastNumber(str)); 

आउटपुट

123.12 
-123 
-123. 

jsfiddle

संबंधित मुद्दे