我是Elm解析器库的新手,我正尝试远离使用正则表达式。我需要解析一个字符串并为双花括号内的每个字符串返回一个字符串列表,例如{{return this}}
我正在使用Parser.sequence
函数,这是我的代码
block : Parser (List String)
block =
Parser.sequence
{ start = "{{"
, separator = ""
, end = "}}"
, spaces = spaces
, item = getSource
, trailing = Optional
}
我的问题是,在item
字段中我该怎么做才能返回花括号之间的字符串。谢谢!
答案 0 :(得分:6)
如何为单词创建自己的解析器?
word : Parser String
word =
getChompedString <|
succeed ()
|. chompIf Char.isAlphaNum
|. chompWhile Char.isAlphaNum
它实际上会截断字母数字字符,因此{{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,对此进行了演示。
答案 1 :(得分: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)