2011-07-11 14 views
5

मैं नहीं नियमित अभिव्यक्ति के साथ बहुत नया हूँ, लेकिन मैं अपनी समस्या के लिए एक पर्याप्त अभिव्यक्ति अब तक ढूँढने में सक्षम नहीं किया गया है:जावास्क्रिप्ट रेगुलर एक्सप्रेशन

मैं एक स्ट्रिंग जाँच करना चाहते हैं कि एक उपयोगकर्ता प्रकार एक टेक्स्टफील्ड स्ट्रिंग में एक अयस्क अधिक शब्द शामिल हैं जो अर्धविराम से अलग होते हैं।

वहाँ वास्तव में कर रहे दो शब्दों के प्रकार:

  1. पहले एक नंबर के होते हैं, एक हाइफन द्वारा पीछा किया और उसके बाद फिर एक नंबर के बाद, उदाहरण के लिए 1-4 या 22-44

  2. दूसरे शब्द में एक संख्या होती है और अल्पविराम शून्य या अधिक बार दोहराया जाता है, उदा। 1,2 या 4,5,6

सभी नियम अर्धविराम से निष्कर्ष निकाला जा करने के लिए है।

एक वैध इनपुट होगा: 1-4;5,6,7;9-11; या 1,3;4-6;8,9,10;

मैं तो कई रूपों की कोशिश की है, लेकिन एक समाधान अब तक नहीं मिल सका। मेरी समस्या यह है कि इस इनपुट स्ट्रिंग में किसी भी संख्या में शर्तें हो सकती हैं। मैंने इसे क्रमशः OR ऑपरेटर और "लुकहेड" के साथ हल करने का प्रयास किया, लेकिन बिना किसी सफलता के।

किसी भी मदद की बहुत सराहना की जाएगी।

धन्यवाद ज्यादा, enne

+4

आपके उदाहरण आपके विवरण से मेल नहीं खाते हैं। पहले "वैध इनपुट" में अंतिम अर्धविराम गुम है, और "22-44" "एक हाइफ़न के बाद एक अंक नहीं है ..."। –

+0

यह सच है केरेक, एक अर्धविराम जोड़ा और "अंक" को "संख्या" में बदल दिया। टिप्पणी के लिए धन्यवाद। – enne87

उत्तर

4

इस regex आपको क्या चाहिए करना चाहिए:

/^(?:[0-9]+-[0-9]+;|[0-9]+(?:,[0-9]+)*;)+$/ 
+0

यह '1-4; 5,6,7; 9-11' स्वीकार नहीं करेगा, टर्मिनल के बिना उसका उदाहरण'; '। – Vache

+0

@Vache - यह नोट करते हुए कि ओपी की आवश्यकता संदिग्ध है कि यह उदाहरण लाइन पर बयान के साथ सहमत नहीं है कि "सभी शर्तों को अर्धविराम के साथ समाप्त किया जाना चाहिए।" – nnnnnn

+0

अच्छा बिंदु। विवरण में कहा गया था कि ** "सभी शर्तों को सेमी-कॉलन के साथ समाप्त किया जाना है" ** इसलिए मैंने माना कि इसमें अंतिम शब्द शामिल है। – EdoDodo

2

संपादित: पहला सवाल देखा अर्धविराम विभाजक थे, अब यह उनके टर्मिनेटर्स के रूप में दिखाता है।

यहाँ एक या अधिक शब्द का क्रम है, अर्धविराम से समाप्त, जिसमें प्रत्येक शब्द या तो एक नंबर या संख्या श्रेणी या अल्पविराम से अलग नंबरों की सूची है: गैर के साथ

/^(\d+(-\d+|(,\d+)*)?;)+$/ 

-capturing समूहों

/^(?:\d+(?:-\d+|(?:,\d+)*)?;)+$/ 
+0

बहुत अच्छा रे, धन्यवाद :) दुर्भाग्यवश, मैं केवल एक उत्तर को स्वीकृत उत्तर के रूप में सेट कर सकता हूं:/ – enne87

1

मेरी ले ..

^(?:\d+-\d+(?:;|$)|(?:\d+(?:[,;]|$))+)+$

+0

बुरा नहीं, अंतिम शब्द का अंतिम अर्धविराम गुम है। आपकी सहायता के लिए धन्यवाद. – enne87

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