2016-11-26 6 views
6

मैं इस चालू करने के लिए कोशिश कर रहा हूँ:विभाजन n शब्दों का एक सरणी में एक स्ट्रिंग

"This is a test this is a test" 
इस में

:

["This is a", "test this is", "a test"] 

मैं इस कोशिश की:

const re = /\b[\w']+(?:[^\w\n]+[\w']+){0,2}\b/ 
const wordList = sample.split(re) 
console.log(wordList) 

लेकिन मैं यह मिला:

[ '', 
    ' ', 
    ' '] 

यह क्यों है?

+0

स्ट्रिंग को विभाजित करने के लिए अनुसरण करने का नियम क्या है? –

+0

@ एजे मैंने प्रश्न अपडेट किया। – alex

+3

'.split() 'में डिलीमीटर शामिल नहीं है, इसलिए यह आपके इच्छित चीजों के विपरीत करता है। विभाजन के बजाए आपको एक नियमित रेगेक्स खोज (एक 'जी' संशोधक के साथ) करने की आवश्यकता है। – JJJ

उत्तर

9

String#split विधि मेल खाती हुई सामग्री द्वारा स्ट्रिंग विभाजित कर देगा तो यह परिणाम सरणी के अंदर मिलान स्ट्रिंग शामिल नहीं होगा (नियम स्ट्रिंग हर एन शब्द विभाजित करने के लिए है।)।

बजाय अपने नियमित अभिव्यक्ति पर एक वैश्विक ध्वज (g) के साथ String#match विधि का उपयोग करें:

var sample="This is a test this is a test" 
 

 
const re = /\b[\w']+(?:\s+[\w']+){0,2}/g; 
 
const wordList = sample.match(re); 
 
console.log(wordList);

Regex explanation here.

4

अपने कोड जाने के लिए अच्छा है। लेकिन विभाजन के साथ नहीं। विभाजन इसे एक delimitor के रूप में इलाज करेंगे। उदाहरण के लिए कुछ इस तरह:

var arr = "1, 1, 1, 1"; 
arr.split(',') === [1, 1, 1, 1] ; 
//but 
arr.split(1) === [', ', ', ', ', ', ', ']; 

इसके बजाय match या exec का उपयोग करें। इस

var x = "This is a test this is a test"; 
 
var re = /\b[\w']+(?:[^\w\n]+[\w']+){0,2}\b/g 
 
var y = x.match(re); 
 
console.log(y);

2

एक वैकल्पिक दृष्टिकोण के रूप में की तरह, आप अंतरिक्ष और बैच में मर्ज हिस्सा द्वारा स्ट्रिंग विभाजित कर सकते हैं।

function splitByWordCount(str, count) { 
 
    var arr = str.split(' ') 
 
    var r = []; 
 
    while (arr.length) { 
 
    r.push(arr.splice(0, count).join(' ')) 
 
    } 
 
    return r; 
 
} 
 

 
var a = "This is a test this is a test"; 
 
console.log(splitByWordCount(a, 3)) 
 
console.log(splitByWordCount(a, 2))

0

उपयोग खाली स्थान के विशेष वर्ण (\s) और matchsplit के बजाय समारोह:

var wordList = sample.text().match(/\s?(?:\w+\s?){1,3}/g); 

स्प्लिट स्ट्रिंग जहां regex मैचों टूट जाता है। मैच जो भी मेल खाता है वह देता है।

यह fiddle देखें।

2

आप उस तरह विभाजित कर सकते हैं:

var str = 'This is a test this is a test'; 
 
var wrd = str.split(/((?:\w+\s+){1,3})/); 
 
console.log(wrd);

लेकिन, आप सरणी से खाली तत्वों को हटाना होगा।

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