根据标题将字符串拆分为多个部分

时间:2013-10-08 21:39:22

标签: javascript regex parsing

我想根据符合特定格式(==HEADER==)的标题将字符串拆分为多个部分。这是输入字符串的样子:

== Section header ==
Text inside section
=== Maybe a nested section ===
With some more text
And more text
==Then the next section header, perhaps w/o spaces between text and equals signs==
With text inside it

这是我想要的输出:

[
    '== Section header ==
    Text inside section
    === Maybe a nested section ===
    With some more text
    And more text',
    '==Then the next section header, without spaces between text and equals signs==
    With text inside it'
]

我试过

pagetext = "== Test header ==\n Some test text, with random equals signs==newlines\n or whatever\n ==Another header    ==   \n more text,\nnewlines\nohmy"
sections = [];
section_re = /==\s*(\s*[^=]*)\s*==/g;
var section_headers = pagetext.match(section_re);
for (var i = 0; i < section_headers.length; i++) {
    var section_start = pagetext.indexOf(section_headers[i]);
    var section_text = pagetext.substring(section_start);
    if (i < section_headers.length - 1) {
        var section_end = section_text.substring(section_headers[i].length).indexOf(section_headers[i + 1]) + section_headers[i].length;
        section_text = section_text.substring(0, section_end);
    }
    sections.push(section_text);
}

但它分裂为“随机等于”的标志,给我:

 ["== Test header ==\n Some...ith random equals signs", "==newlines\n or whatever...ore text,\nnewlines\nohmy"]

这是不对的。我有一种感觉,我的代码可能太复杂了 - 有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

一起去吧
result = subject.match(/^==[^=]*?==$((\r?\n?)(?!==[^=]).*)*/img);

答案 1 :(得分:0)

如果你感到懒惰,你可以试一试:https://code.google.com/p/wiki2html/

之前我成功使用过它。