2016-03-15 92 views
0

我試圖將字符串分割成線的陣列,但它是不工作的句子,這是我到目前爲止已經試過 -字符串分割到在JavaScript

value = '<p>line1</p><p>line2</p><p>line3</p>'; 

var lines = value.split('/<p>|<\/p>/'); 
console.log(lines.length); 

//expecting 3 but output is 1 

回答

0

一種不同的方法可以使用本機選擇(此實現與IE9 +工程)

的想法是把你的DOM字符串在實際的HTML文檔正文中,並使用querySelectorAll來獲取段落,將NodeList轉換爲Array(由返回的類型)。然後使用高階函數Array.prototype.map來構建您所需的線陣列。

這似乎有點矯枉過正,但如果您的某些段落碰巧具有額外的屬性,則這種功能很強大。

var sandbox = document.implementation.createHTMLDocument(); 
sandbox.body.innerHTML = '<p>line1</p><p>line2</p><p>line3</p>'; 

var paragraphs = Array.prototype.slice.call(sandbox.querySelectorAll('p')); 
var lines = paragraphs.map(function (node) { 
    return node.innerText; 
}); 
1

你正在做的它錯了。使用這種方式:

value = '<p>line1</p><p>line2</p><p>line3</p>'; 
 

 
var lines = value.split('</p><p>'); 
 
console.log(lines.length);

而且,除去第一和最後<p></p>,使用你有正則表達式。而對於那些誰問:

value = '<p>line1</p><p>line2</p><p>line3</p>'; 
 

 
value = value.replace(/^<p>|<\/p>$/g, ""); 
 

 
var lines = value.split('</p><p>'); 
 
console.log(lines.length); 
 
console.log(lines);

0

你可以做到這一點與正則表達式。

value = '<p>line1</p><p>line2</p><p>line3</p>'; 

var v = value.replace(new RegExp("<p>(.*?)<\/p>", "g"), '$1\n'); 
var lines = v.split("\n"); 
lines.splice(-1); 
console.log(lines); 

https://jsfiddle.net/goe14nkf/

這正確返回你的臺詞:["line1", "line2", "line3"]