PetitParserDart中有一个内置的whitespace()
解析器,用于检查字符:
(9 <= value && value <= 13) || (value == 32) || (value == 160)
|| (value == 5760) || (value == 6158) || (8192 <= value && value <= 8202) || (value == 8232)
|| (value == 8233) || (value == 8239) || (value == 8287) || (value == 12288)
现在我想要一个whitespace()
解析器的自定义空白解析器,但不接受行分隔符\n
。
如何做到这一点,我不想复制和修改whitespace()
内的代码。有更好的方法吗?
答案 0 :(得分:3)
有多种方法可以做到这一点。
重用现有解析器的一种方法是:
char('\n').not().seq(whitespace()).pick(1);
另一种方法是创建一个新的字符模式:
pattern('\t\f\r ');
这与whitespace()
接受的所有unicode空格不完全匹配,但对于大多数用例来说可能已足够。或者,您也可以添加unicode范围:
pattern('\t\f\r \u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000');