2012-11-28 8 views
9

मैं नीचे की तरह एक स्ट्रिंग है:जावास्क्रिप्ट Regex मिलान करने के लिए केवल एक ही घटना कोई और अधिक या कम

single-hyphen 

मैं हाइफन मैच के लिए की जरूरत है। हालांकि, मैं केवल हाइफ़न की एक घटना से मेल खाना चाहता हूं, कम या ज्यादा नहीं।

तो स्ट्रिंग ऊपर सही वापस आ जाएगी, लेकिन नीचे दो झूठी हो जाएगा:

1. a-double-hyphen 
2. nohyphen 

मैं यह करने के लिए रेगुलर एक्सप्रेशन कैसे परिभाषित करते हैं?

अग्रिम धन्यवाद।

+0

तो यह एक आवश्यकता के बाद से पहले कम से कम 1 अन्य चरित्र और कम से कम 1 अन्य चरित्र के लिए है "-"? या नहीं, स्ट्रिंग में बिल्कुल "-" के लिए बस सरल जांच? जैसा "-asdf" या "asdf-" मान्य होगा? – Ian

+0

यदि शुरुआत और अंत में "-" के अलावा कोई चरित्र होना आवश्यक है, तो आप इस तरह कुछ उपयोग कर सकते हैं: http://jsfiddle.net/NmWTy/1/ - शायद सबसे अधिक कुशल नहीं है, और नहीं regex का उपयोग नहीं करते हैं, लेकिन सिर्फ एक विकल्प है - यही कारण है कि यह एक टिप्पणी है, जवाब नहीं। – Ian

+0

@ इयान धन्यवाद। मैं विशेष रूप से एक रेगेक्स की तलाश में था जो मैंने नीचे पाया था। –

उत्तर

20

आप इस

/^[^-]+-[^-]+$/ 

^ स्ट्रिंग

$ की शुरुआत दर्शाया गया है क्या कर सकते हैं -

छोड़कर

[^-]+ मैचों 1 स्ट्रिंग के अंत को दर्शाया गया है कई पात्रों को

+0

क्यों '[^ -] *?' और नहीं '[^ -] * '? – Dancrumb

+0

@ डांक्रंब ओप्स..एचएक्स इसे इंगित करने के लिए – Anirudha

+2

अनिच्छुक मिलान उपयोगी नहीं है और मैं '*' के बजाय '+' का उपयोग करूंगा। बेहतर: '^ [^ -] + - [^ -] + $' – Tomalak

3

अजीब (और रेगेक्स नहीं) ... लेकिन क्यों नहीं?

2 === str.split("-").length; 
+1

लॉल ... हाँ, इस तरह फोरेस्ट गंप ने यह किया होगा। मैं शायद यह आपके जैसा ही कर सकता था लेकिन मुझे एक रेगेक्स चाहिए। –

+0

@ChuckUgwuh ठीक है, इस मामले में मैं regex के लिए जाना होगा अगर केवल एक * आवश्यकता * है। – VisioN

+0

हाँ, यह एक आवश्यकता थी। यद्यपि सुझाव के लिए बहुत बहुत धन्यवाद। फोरेस्ट गंप संदर्भ के साथ बस किडिन भी। –

2
/^[^-]*-[^-]*$/ 

स्ट्रिंग की शुरुआत, गैर-हाइफ़न की संख्या, एक हाइफ़न, किसी भी संख्या में गैर-हाइफ़न, स्ट्रिंग का अंत।

String.prototype.hasOne = function (character) { 
    var first = this.indexOf(character); 
    var last = this.lastIndexOf(character); 

    return first !== -1 && 
     first === last; 
}; 

'single-hyphen'.hasOne('-'); // true 
'a-double-hyphen'.hasOne('-'); // first !== last, false 
'nohyphen'.hasOne('-'); // first === -1, false 

http://jsfiddle.net/cSF8T/

+0

जावा नियमित अभिव्यक्ति एक डेलीमीटर चरित्र का उपयोग नहीं करती है। – Tomalak

+0

@Tomalak: जावास्क्रिप्ट जावा नहीं है। – Amadan

+0

जावास्क्रिप्ट वाले लोग करते हैं – Dancrumb

2

आप indexOf और lastIndexOf के संयोजन का उपयोग कर सकते हैं। यह स्ट्रिंग में हेरफेर नहीं करता है या regex का उपयोग नहीं करता है।

// only true if only one occurrence of - exists in string 
(str.indexOf("-") + 1) % (str.lastIndexOf("-") + 1) === 0 

फिडल here

0

अपरंपरागत लेकिन यह काम करता है:

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