2016-03-15 90 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"]