我是Elm解析器库的新手,我正试图摆脱使用正则表达式。我需要解析一个字符串并返回双花括号内的每个字符串的字符串列表,所以{{return this}}
我使用的是Parser.sequence
函数,这是我的代码
block : Parser (List String)
block =
Parser.sequence
{ start = "{{"
, separator = ""
, end = "}}"
, spaces = spaces
, item = getSource
, trailing = Optional
}
我的问题是,我应该在item
字段中做什么来在大括号之间返回字符串。谢谢!
如何为单词创建自己的解析器呢?
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,它演示了它。
你需要一个返回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)