簡體   English   中英

Elm Parser無法在卷曲大括號內返回弦

[英]Elm Parser cannot Return String Inside Curly Braces

我是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
    }

這是一個演示它的ellie-app示例

您需要一個返回Parser String的函數。 你可以使用變量函數:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM