[英]negative number in parentheses using javascript
我使用match將數學表達式拆分為單獨的字符串並將它們保存在數組中。
var STRING = ST.match(/\d*\.\d+|\d+|[()/*+-]/g);
但是這個方法將所有內容分開,包括括號內的負數。 例如(-2 + 4)不給我-2,而是保存 - 在STRING數組的一個索引中,在下一個索引中保存2。 無論如何使用匹配並保存括號中的負數?
這就是我想要的:( - 2 + 4):
STRING[0] give me (
STRING[1] give me -2
STRING[2] give me +
STRING[3] give me 4
STRING[4] give me )
如果沒有正數工作正常:(2 + 4):
STRING[0] give me (
STRING[1] give me 2
STRING[2] give me +
STRING[3] give me 4
STRING[4] give me )
我不認為只用一個正則表達式解析像"(-2+4*-(3.5--8))"
這樣的復雜情況,特別是考慮到我們在javascript中沒有負面看法。
解決方案是通過在分隔符和無符號表達式之間合並符號來對匹配數組進行后處理。
在我看來,正則表達式在這里很有用,但僅適用於主要的標記化。 當你構建二進制表達式樹(或你選擇的任何其他正式表示)時,大部分工作都將領先於你。
不幸的是,如果您要解決的是解析數學表達式,則無法使用正則表達式。
RegExps可以用於由Regular Grammars描述的語言,而算術表達式則不能,它們由Context Free Grammar( CFG )描述。 如果你想解析,也許解釋結果,你肯定需要一些堆疊狀態機。
你可以看看這個眾所周知的算法 。
希望這可以幫助。
您可以為數字添加可選符號,這可以與您的示例一起使用:
var STRING = ST.match(/-?\d*\.\d+|-?\d+|[()/*+-]/g);
但是,這也會將減號運算符變為符號。 表達式(4-2)
會給你{ "(", "4", "-2", ")" }
。
此外,它會愉快地“解析”像+---((((***
沒有抱怨。如果你想要一個有意義的結果,你應該解析它是真實的,而不是用正則表達式拆分它)。
我認為你在RegExp中有一些錯誤嘗試這個,它對我有用:
var STRING = ST.match(/(\d*)(\.)(\d+)|(\d+)|[()\/*+-]/g);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.