मेरे मामले में मैं पूरी लाइन का परीक्षण कर रहा हूँ।
/(?!^,)^((^|,)([abc]+|[123]+))+$/.test('a,b,c,1,2,3');
true
नकारात्मक लुकहेड प्रारंभिक अल्पविराम को छोड़ देता है।
/(?!^,)^((^|,)([abc]+|[123]+))+$/.test(',a,b,c,1,2,3');
false
यदि आपको व्यक्तिगत घटकों की आवश्यकता है तो सत्यापन के बाद एक सरल विभाजन करें।
मैं पीएलएसएस उपखंड अनुभाग और उपखंडों को मान्य कर रहा हूं।
// Check for one or more Section Specs consisting of an optional
// subsection followed by an "S" and one or two digits. Multiple
// Section Specs are separated by space or a comma and optional space.
//
// Example: SW/4 SW/4 S1, E/2 S2, N/2 N/2 S12
//
// Valid subsections are -
// (1) [NS][EW]/4\s+[NS][EW]/4 eg. NW/4 SE/4 (40 ac)
// (2) [NSEW]/2\s+[NS][EW]/4 eg. N/2 SE/4 (80 ac)
// (3) [NS]/2\s+[NS]/2 eg. N/2 S/2 (160 ac)
// (4) [EW]/2\s+[EW]/2 eg. E/2 W/2 (160 ac)
// (5) [NS][EW]/4 eg. NE/4 (160 ac)
// (6) [NSEW]/2 eg. E/2 (320 ac)
// (7) 1/1 Shorthand for the full section (640 ac)
//
// Expressions like E/2 N/2 are not valid. Use NE/4 instead.
// Expressions like NW/4 E/2 are not valid. You probably want W/2 NE/4.
var pat = '' +
'(([NS][EW]/4|[NSEW]/2)\\s+)?[NS][EW]/4\\s+' + // (1), (2) & (5)
'|([NS]/2\\s+)?[NS]/2\\s+' + // (3) & part of (6)
'|([EW]/2\\s+)?[EW]/2\\s+' + // (4) & part of (6)
'|1/1\\s+'; // (7)
pat = '(' + pat + ')?' + 'S\\d{1,2}'; // a Section Spec
// Line anchors, join alternatives and negative lookahead to exclude an initial comma
pat = '(?!^,)^((^|,\\s*|\\s+)(' + pat + '))+$';
var re = new RegExp(pat, 'i');
console.log(pat);
(?!^,)^((^|,\s*|\s+)(((([NS][EW]/4|[NSEW]/2)\s+)?[NS][EW]/4\s+|([NS]/2\s+)?[NS]/2\s+|([EW]/2\s+)?[EW]/2\s+|1/1\s+)?S\d{1,2}))+$
एक बार मान्य होने पर मैं सकारात्मक दिखने का उपयोग करके विभाजित हो जाता हूं।
var secs = val.split(/(?<=S\d+)(,\s*|\s+)/i);
मुझे नहीं लगता कि आप आगे बढ़ने में '!' चाहते हैं (जो आगे नकारात्मक दिखने के लिए है), लेकिन वास्तव में एक चरित्र वास्तव में एक चरित्र से मेल नहीं खाता है, इसलिए यह मेल नहीं खाएगा। आपको बिना दिखने के ठीक होना चाहिए '(?: (?:^|,) ([ए-सी 1-3])) + ' – jswolf19
@ jswolf19: मैं मैच में घुमावदार चरित्र से बचने के लिए इसका उपयोग करता हूं। मुझे व्यक्तिगत वरीयता लगता है। - संयोजन मुझे पहले मैच और बाकी दोनों भी देता है। (इसके बिना मैं या तो केवल पहला टोकन प्राप्त करूंगा, या दूसरा-आगे) –
मुझे पता है कि आप मैच में ',' नहीं चाहते हैं, लेकिन इसे मिलान करना होगा: यदि आपके पास 'ए, 1' है, तो आपका regex इसे मेल नहीं करेगा। लुकहेड ',' देखता है, लेकिन जब भी आप 1 से मिलान करने का प्रयास करते हैं तब भी यह वहां होता है क्योंकि लुकहेड ',' को फेंक नहीं देता है। आपको उस '(?:) 'के लिए एक गैर-कैप्चरिंग समूह की आवश्यकता है। – jswolf19