我想用javascript分割一个段落,如果我在段落里面有<br />
后跟换行符和数字。
这是段落的例子:
aaaaaa aaaaa aaaaa aaaaa aaaa <br />
1 bbbb bbbbb bbbbb bbbb bbb <br />
2 cccc ccccc ccccc cccc ccc <br />
* dddd ddddd ddddd dddd ddd <br />
我希望有一个包含3个元素的数组:
1. aaaaaa aaaaa aaaaa aaaaa aaaa <br />
2. 1 bbbb bbbbb bbbbb bbbb bbb <br />
3. 2 cccc ccccc ccccc cccc ccc <br />
* dddd ddddd ddddd dddd ddd <br />
我试过这个:
<br \/>\d
但是由于新线我认为这不起作用。
非常感谢你的帮助。
答案 0 :(得分:1)
("aaaaaa aaaaa aaaaa aaaaa aaaa <br />\r\n\
1 bbbbbbbbbbb <br />\r\n\
2 cccc ccccc ccccc cccc ccc <br />\r\n\
3 dddd ddddd ddddd dddd ddd <br />")
.split(/\s*([\d|\*]+.+<br[^>]*>)[\r|\n|\r\n]\s*/gmi)
// criteria filtering
.join('\r\n') // removing the last empty element (2nd) after split
.replace(/\r\n\r\n/gmi,'\r\n') // remove double line breaks
.split(/\r\n/); // split again
答案 1 :(得分:1)
假设字符串存储在名为str
的变量中,则以下内容应该起作用:
str.split(/<br \/>$[\s\S]^(?=\d+)/m)
我用过:
/m
),允许$匹配一行的结尾,^匹配下一行的开头。[\s\S]
,详细here。(?=\d+)
。但是,它不包含在匹配中,因此不会从字符串中删除数字。 编辑:这将从列表中除最后一个元素之外的所有元素中删除<br />
。由于我现在想不出更好的方法,你可以使用类似的东西重新添加它们:
var parts = str.split(/<br \/>$[\s\S]^(?=\d+)/m);
var final = [];
for (var i = 0; i < parts.length - 1; i++) {
final.push(parts[i] + '<br />');
}
final.push(parts[parts.length - 1]);
不理想,但似乎对我有用。