2

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()。有一个更好的方法吗?

4

1 回答 1

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');
于 2013-06-28T19:03:57.380 回答