2012-02-22 11 views
8

मुझे एक टोकनज़र की आवश्यकता है जो शब्दों के बीच मनमानी सफेद-स्थान वाली एक स्ट्रिंग को खाली उप-तारों के बिना शब्दों की एक सरणी बनाएगी।जावास्क्रिप्ट में व्हाइटस्पेस का उपयोग कर एक स्ट्रिंग को विभाजित करें?

उदाहरण के लिए

, एक स्ट्रिंग दिया:

" I dont know what you mean by glory Alice said." 

मैं का उपयोग करें:

str2.split(" ") 

यह भी रिटर्न खाली उप तार:

["", "I", "dont", "know", "what", "you", "mean", "by", "glory", "", "Alice", "said."] 

को फिल्टर करने के लिए कैसे से रिक्त स्ट्रिंग एक सरणी?

उत्तर

15

आप शायद भी फिल्टर करने के लिए, बस इस रेगुलर एक्सप्रेशन का उपयोग कर विभाजित की जरूरत नहीं है:

" I dont know what you mean by glory Alice said.".split(/\b\s+/) 
+0

विषय से संबंधित नहीं: क्या मतलब regex में '\ b'? –

+3

एक शब्द सीमा, जैसे एक स्थान, एक न्यूलाइन चरित्र, विराम चिह्न या स्ट्रिंग के अंत (https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions) से मेल खाता है। सही रेगेक्स नहीं हो सकता है लेकिन उस उदाहरण के लिए यह काम करता है। – Daff

+0

@ मुस्तफा हाँ, मुझे पता है। लेकिन यह सिर्फ एक जिज्ञासा है। –

7

देख आप विभाजन उपयोग करने से पहले स्ट्रिंग ट्रिम चाहिए।

var str = " I dont know what you mean by glory Alice said." 
var trimmed = str.replace(/^\s+|\s+$/g, ''); 
trimmed = str.split(" ") 
2

मैं .match की सिफारिश:

str.match(/\b\w+\b/g); 

इस शब्द सीमाओं के बीच शब्दों से मेल खाता है, इसलिए सभी रिक्त स्थान मेल नहीं खाते हैं और इस प्रकार है, जिसके परिणामस्वरूप सरणी में शामिल नहीं है।

+0

के लिए खाता कैसे करें यह बेहतर काम करता है: >>> str2 "हम्प्टी डम्प्टी ने तिरस्कार से मुस्कुराया निश्चित रूप से आप तब तक नहीं करते जब तक मैं आपको नहीं बताता कि मेरा मतलब है आपके लिए नॉक-डाउन तर्क! " उपयोग: str3 = str2।मैच (/ \ b \ w + \ b/g); परिणाम: >>> str3 ["हम्प्टी", "डम्प्टी", "मुस्कुराया", "तिरस्कार", "का", "कोर्स", "आप", "न करें", "तक", " मैं "," बताओ "," आप "," मैं "," मतलब "," सिद्धांत "," ए "," अच्छा "," दस्तक "," नीचे "," तर्क "," के लिए "," आप " ] तो डब्ल्यू + मैच भी "-" – dokondr

+1

@ डॉकंडर: आप शब्द वर्णों के रूप में क्या गिनते हैं? यदि रिक्त स्थान को छोड़कर यह सबकुछ है, तो आप '\ w' के बजाय '[^]' का उपयोग करना चाह सकते हैं। – pimvdb

7
str.match(/\S+/g) 

गैर अंतरिक्ष दृश्यों ["I", "dont", "know", "what", "you", "mean", "by", "glory", "Alice", "said."] की सूची लौटाता है

str.match(/\w+/g) 

सभी शब्दों की एक सूची देता है (ध्यान दें कि इस में डॉट शामिल "कहा।"): ["I", "dont", "know", "what", "you", "mean", "by", "glory", "Alice", "said"]

डॉक्स पर match()

+1

अच्छा जवाब। दूसरों के संदर्भ के लिए, '/ S + /' उन पात्रों के समूहों के खिलाफ मेल खाता है जो ** ** ** व्हाइटस्पेस नहीं हैं, जबकि '/ w + /' अक्षरों के समूह मेल खाते हैं जो ** ** अल्फान्यूमेरिक + अंडरस्कोर हैं। यही कारण है कि अवधि ('.') चरित्र एक में मेल खाता है लेकिन दूसरे नहीं। –

0

मुझे लगता है कि खाली उप-स्ट्रिंग होती है क्योंकि कई सफेद-रिक्त स्थान होते हैं जिन्हें आप एक प्रतिस्थापन() में एक लूप में एकाधिक wh को प्रतिस्थापित करने के लिए उपयोग कर सकते हैं ite-रिक्त स्थान के लिए एक एकल white-space तो विभाजन() के साथ कार्यक्रम विभाजित करने के लिए इस तरह एक भी व्हाइट स्पेस का उपयोग:

// getting full program from div 
 
var program = document.getElementById("ans").textContent; 
 
//removing multiple spaces 
 
var res = program.replace(" ", " "); 
 
for (i = 0; i <= program.length; i++) { 
 
    var res = res.replace(" ", " "); 
 
} 
 
// spliting each word using space as saperator 
 
var result = res.split(" ");

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

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