2017-04-26 20 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