2010-08-23 17 views
5

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

var re = /[a-z]+[$\s+]/gi; 
var test = "test one two  three four "; 
var results = test.match(re); 

परिणाम मैं उम्मीद कर रहे हैं:

[0]: "test " 
[1]: "one " 
[2]: "two " 
[3]: "three " 
[4]: "four " 

मैं क्या कर रहा हूँ:

[0]: "test " 
[1]: "one " 
[2]: "two  " 
[3]: "three " 
[4]: "four " 

हालांकि, यह केवल एक अंतरिक्ष के लिए प्रत्येक शब्द के बाद से मेल खाता है गलत कर रहे हो

+0

अगर आप अंतरिक्ष रखने के लिए, की जरूरत क्यों 'जोड़ने दूसरी कक्षा में $ 'और' + '? – dierre

उत्तर

7

पर विचार करें:

var results = test.match(/\S+\s*/g); 

कि गारंटी होगी कि आप किसी भी वर्ण न भूलें (शुरुआत में कुछ रिक्त स्थान के अलावा, लेकिन \S*\s* पर यह समस्या दूर कर सकते हैं)

आपका मूल regex पढ़ता है:

  • [a-z]+ - पत्र के किसी भी संख्या (कम से कम एक)
  • ०१२३९६५५५२२८ से मेल खाते हैं- एक एकल चरित्र - $, + या सफेद जगह। इस समूह के बाद कोई क्वांटिफायर नहीं है, आप केवल एक ही स्थान से मेल खाते हैं।
2

निम्नलिखित का प्रयास करें:

test.match(/\w+\s+/g); // \w = words, \s = white spaces 
+1

या यदि व्हाइटस्पेस का आखिरी बिट वैकल्पिक है: 'test.match (/ \ w + \ s */gi)' – Wolph

+0

@ वोल्फ: केस-असंवेदनशील ध्वज क्यों? –

+0

यह "मैं" कोडिंग "एम" और "कोडिंग" में विभाजित होगा। –

1

आप वर्ण वर्ग के अंदर + उपयोग कर रहे हैं। इसके बजाय चार वर्ग के बाहर * का उपयोग करने का प्रयास करें।

/[a-z]+\s*/gi; 

+ वर्ण वर्ग के अंदर एक शाब्दिक + के रूप में और नहीं एक मेटा चार माना जाता है। * का उपयोग शून्य या अधिक रिक्त स्थान पर कब्जा करेगा जो किसी भी शब्द का पालन कर सकता है।

0

+ अक्षर वर्ग के भीतर शाब्दिक रूप से लिया जाता है। आपको इसे बाहर ले जाना होगा: [\s]+ या बस \s+ ($ कक्षा के अंदर कोई अर्थ नहीं है)।

0

आपके रेगेक्स का आवश्यक बिट जो बदलना आवश्यक है वह व्हाइटस्पेस या अंत-रेखा से मेल खाता है।

प्रयास करें:

var re = /[a-z]+($|\s+)/gi 

या, non-capturing groups के लिए (मैं अगर तुम /g ध्वज के साथ इस की जरूरत है पता नहीं है):

var re = /[a-z]+(?:$|\s+)/gi 
संबंधित मुद्दे