Elm Parser无法在卷曲大括号内返回弦

问题描述 投票:3回答:2

我是Elm解析器库的新手,我正试图摆脱使用正则表达式。我需要解析一个字符串并返回双花括号内的每个字符串的字符串列表,所以{{return this}}我使用的是Parser.sequence函数,这是我的代码

block : Parser (List String) 
block = 
  Parser.sequence
    { start = "{{"
    , separator = ""
    , end = "}}"
    , spaces = spaces
    , item = getSource
    , trailing = Optional
    }

我的问题是,我应该在item字段中做什么来在大括号之间返回字符串。谢谢!

parsing elm
2个回答
6
投票

如何为单词创建自己的解析器呢?

word : Parser String
word =
  getChompedString <|
    succeed ()
      |. chompIf Char.isAlphaNum
      |. chompWhile Char.isAlphaNum

它实际上选择了alphanum字符,所以{{return textABC123}}将导致Ok ["return","textASD234"]。对于{{return text}} Char.isLower就足够了。

然后你可以在sequence而不是getSource中使用它(因为getSource也会选择}字符,这在当前情况下是不合适的):

block : Parser (List String) 
block = 
  Parser.sequence
    { start = "{{"
    , separator = ""
    , end = "}}"
    , spaces = spaces
    , item = word
    , trailing = Optional
    }

这是an ellie-app example,它演示了它。


0
投票

你需要一个返回Parser String的函数。你可以使用variable函数:

block : Parser (List String)
block =
    Parser.sequence
        { start = "{{"
        , separator = ""
        , end = "}}"
        , spaces = spaces
        , item =
            Parser.variable
                { start = Char.isAlphaNum
                , inner = Char.isAlphaNum
                , reserved = Set.empty
                }
        , trailing = Optional
        }

例:

> Parser.run block "{{foo bar baz}}"
Ok ["foo","bar","baz"]
    : Result (List Parser.DeadEnd) (List String)
© www.soinside.com 2019 - 2024. All rights reserved.