2014-04-12 24 views
0

我必須這樣使用pegjs匹配令牌:如何匹配以「?」開頭的令牌在pegjs

?xxx ?yyy 

我還以爲這會工作:

variable 
    = str:?[a-z]+ { console.log('---->>>',str); return str.join(""); } 

當我分析源我得到和錯誤:

Object ? has no method 'join'

這是因爲str變量不是匹配令牌的數組......任何想法如何做到這一點?

+0

你確定這是規則的真實副本和過去,因爲我認爲當解析語法爲'str:?[a-z] +'本身不是正確的時,pegjs已經會拋出錯誤。 –

+0

對不起。你是對的。這是str [?] [a-z] + ...我從代碼的較舊/錯誤的副本中複製... – Johan

回答

1

您可以組文字一起:

variable 
    = str:("?"[a-z]+) 

在這種情況下str["?",["a","b","c"]]?abc,或者,如果?不一定是第一個字符,只是它包含在類:

variable 
    = str:[?a-z]+ 

然後你會得到一個正常的數組["?","a","b","c"]