2017-04-26 23 views
1

我想这样的字符串分割:飞镖 - 分割字符串的正则表达式

x^-5 - 3 

到像这样的列表:

[x^-5, -, 3] 

后的第一个减去^必须相同列表索引作为x,因为它只是负指数。但是,我希望其他不是任何指数的不利因素都可以在他们自己的指数上。

当通过 - 进行分割时,显然我的x^-5也被分割为两个。

那么有什么办法可以使用RegEx或类似的东西来实现这个吗?

在此先感谢

+4

您是否尝试使用空格拆分? '.split(new RegExp(r“\ s +”))' –

+0

对不起,我忘了提及它应该没有空白的工作...但如果我没有找到另一种解决方案,我会坚持空格,谢谢。 – OhMad

+1

事实证明,在Dart中,您不能使用JS方法来捕获子模式以使用拆分块返回。你最好写一个解析器或使用任何现成的库。 –

回答

4

如果使用allMatches,而不是split,你可以使用这样的模式:

(?:\^\s*-|[^\-])+|- 

Working example: DartPad

  • 我们匹配包括任何东西,除了-令牌,或^-
  • 如果我们达到一个不是指数的-,我们可以单独匹配它,类似于分割。

一些注意事项:

  • 有相似的模式,这可能不是最有效的,但它是短暂的。
  • 如果你匹配的数学表达式,有很多事情可能会出错(例如括号),正则表达式不是一个很好的实现方式。
  • 这基本上是match to skip的诡计。
+0

在其他语言中,你可以用lookbehind,['(?<!\ ^)-'](https://regex101.com/r/2vlDCy/1),但那不是不支持JavaScript(和Dart)。 – Kobi

+0

哇,真棒。正是我在找什么,谢谢:) – OhMad

+0

顺便说一句,你会用什么,而不是正则表达式? – OhMad