Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在保留顺序的情况下,如何解析大纲_Javascript_Parsing_Outline - Fatal编程技术网

Javascript 在保留顺序的情况下,如何解析大纲

Javascript 在保留顺序的情况下,如何解析大纲,javascript,parsing,outline,Javascript,Parsing,Outline,我正在尝试解析一个看起来像这样的文档 <line>(a) main category</line> <line>(1) sublime</line> <line>(i) sub sub line</line> <line>(b) other category </line> 我不知道如何确保像我是罗马数字还是字母。这似乎应该有一个库或模式,但我似乎找不到 有人能想出一个模式吗?我想使用js,但我对语

我正在尝试解析一个看起来像这样的文档

<line>(a) main category</line>
<line>(1) sublime</line>
<line>(i) sub sub line</line>
<line>(b) other category </line>
我不知道如何确保像我是罗马数字还是字母。这似乎应该有一个库或模式,但我似乎找不到


有人能想出一个模式吗?我想使用js,但我对语言不太了解。

了解这一行的内容

var letter = (line.match(/^\s*\(.{1,2})\)/) || [''])[0]

循环遍历每一行,并检查当前标题与前面的标题

创建一个类似这样的方法不是有效的JS,只是伪代码

function isSameType(last, current) {
    if (typeof last == 'numeric' && typeof current == 'numeric') { 
        return true; // 1, 2, 3, 4 etc.
    }
    if (last == 'a' && current == 'b') { //Improve here ;p
        return true; 
    }
    if (last == 'i' && current == 'ii') {
        return true;
    }
    if (last == 'h' && current == 'i') {
        return true; // This is an edgecase... Most likely I after H is the same type - but it might not be, you'll never know for sure
    }
    return false; //Its not caught - go deepar!
}
所以,有了这个标记,你就有了一些可以工作的东西,但不是完全防水的

编辑:如果这是所有的信息-你可以停止搜索,因为不可能知道H后面的I是否真的更深一层。这是不可能的

编辑2:只要它是在A->1->I格式,它应该工作

a.  LEVEL 0
b.  LEVEL 0
c.  LEVEL 0
1.  LEVEL 1
2.  LEVEL 1
i.  LEVEL 2
ii. LEVEL 2
3.  LEVEL 1
i.  LEVEL 2
e.  LEVEL 0 <- this might be an issue - say the letter is V, you wouldn't know if it was level 1 alphabetical or roman (level 2) - Or maybe they went to "a" - in that case its probably level 3, and not level 1, because the A was already there in level 1. A lot of rules!

有了正确的规则,你会走得更远。但是如果他们从3级iv跳到1级v,你可能会遇到麻烦。但到目前为止,如果你看到v,前面的级别是数字3,那么它一定是罗马的。

好吧,我在这里看到的模式是,它应该用括号封装-一个简单的正则表达式可以帮你解决这个问题,我同意,我已经捕捉到了这些信息。我担心订单,得到1,我连接到啊,对吧。我将定义一个检查类型的方法,这样您就可以看到级别是否相同或更深—类似于;如果“a”的级别与“i”的级别相同,其中“a”的级别将是检查数字=相同1、2、4等的方法,则a.b.c.d.e.f.g。是一样的,一,二,三,六,五,四是一样的。但是一旦ABC到HI j k,你就会遇到麻烦。。或V。。或者M。。嗯,除非你了解历史——知道b之后的i应该更深一层,h之后的i不应该更深一层。你明白我什么意思吗?抱歉,这里有点深思熟虑是的,这是我的想法,但似乎在某个地方需要一个更好的模式。此外,我和v仍然是我提出的任何创造性解决方案的一个问题,就像你说的,这不能维持秩序,例如,我如何知道1与a或B匹配?你到底想要什么?我需要以一种方式组织它,我有一个json对象集合,只是为了简单起见,在这种情况下,集合将有两个项a和B在a里面会有一个物体,在1里面会有一个物体,等等。我不需要像你在这里做的那样只需要指示器,我正在研究算法,但我有一段时间,我会尽快编辑我的答案,幸运的是,真实数据中有大量isHmm,只要嵌套从a->1->I开始,那么你就可以确定它。这意味着我在A之后永远不会更深,因为中间应该有一个数字级别。我想这是真的,嗯,我没有那样想。我想我们仍然会有一个问题,例如h1i2i1,像这样的东西仍然是一个问题。是的,不能保证有一个I,所以它也可能是h1i,我不知道我应该是数字还是字符。这可以通过向前看来解决,但如果我是最后一行,这将成为一个问题。这比乍一看要复杂得多:-