2016-09-13 52 views
3

我正在構建一種叫做公式構建器的東西。這個想法是,用戶必須輸入textarea中的公式文本,然後我們將解析字符串值。結果是數組。正則表達式 - 分裂數學表達式

例如,本文將被解析

LADV-(GCNBIZ+UNIN)+(TNW*-1) 

然後生成下面

["LADV", "-", "(", "GCNBIZ", "+", "UNIN", ")", "+", "(", "TNW", "*", "-1", ")"] 

的點的結果是分割由該字符的一個接合的每個字:+*/-(,和這個);但仍然包括分離器本身。

我試圖用這個表達式/[-+*/()]/g來分割,但結果不包括分割符字符。還需要將-1作爲一個表達式進行檢測。

["LADV", "MISC", "", "GCNBIZ", "UNIN", "", "", "TNW", "", "1", ""] 

什麼是匹配正則表達式來解決這個問題?

+0

http://stackoverflow.com/a/18089658/967478 – shashwat

回答

1

可以使用match代替split與交替的正則表達式:

var s = 'LADV-(GCNBIZ+UNIN)+(TNW*-1)'; 
 

 
var m = s.match(/(-\d+(?:\.\d+)?|[-+\/*()]|\w+)/g); 
 

 
console.log(m); 
 

 
//=> ["LADV", "-", "(", "GCNBIZ", "+", "UNIN", ")", "+", "(", "TNW", "*", "-1", ")"]

正則表達式破碎:在交替模式

(     # start capture group 
    -    # match a hyphen 
    \d+(?:\.\d+)? # match a number 
    |    # OR 
    [-+\/*()]  # match one of the symbols 
    |    # OR 
    \w+    # match 1 or more word characters 
)     # end capture group 

順序很重要。

+1

非常感謝,它的工作對我來說真的很有幫助。這一個非常詳細。但對不起,我不能接受這個作爲接受的答案,因爲@ thomas回答第一:-) – nvl

+1

@NovalAgungPrayogo No. anubhava是第一個回答。 –

+2

對不起!我的錯誤然後,我只是改變了這個接受的答案:-) – nvl

2

var input = 'LADV-(GCNBIZ+UNIN)+(TNW*-1)'; 
 
var match = input.match(/(-?\d+)|([a-z]+)|([-+*()\/])/gmi); 
 
console.log(match);

+0

非常感謝! – nvl