当String.endsWith接受String时,为什么String.startsWith将Pattern作为输入

时间:2014-12-29 00:53:53

标签: dart

两种方法之间存在这种非常相似的接口不匹配。

bool endsWith(String other)
bool startsWith(Pattern pattern, [int index=0])

这是什么原因?作者的想法是什么?

1 个答案:

答案 0 :(得分:4)

Pattern的API并未提供任何向后搜索匹配的方法。如果endsWith采用了一种模式,则需要逐个尝试从字符串后面找到匹配项(最有可能是O(n ^ 2))。

请注意,您不能只使用Pattern.allMatches并查看最后一次匹配是否在输入结尾处结束:

var re = new RegExp('a|ab');
re.allMatches('ab'); // => one match: 'a'.

在这个例子中只有' a'是匹配的,如果我们使用allMatches迭代器来确定字符串是否以给定的正则表达式结束,它将错误地失败。