2016-08-16 106 views
3

我有任務爲複雜和嵌套的JSON編寫過濾器。爲此,我需要評估用戶在輸入字段中輸入的布爾表達式。 對於這個問題的緣故可以說,我們已經得到了以下輸入:在Javascript中將複雜的字符串表達式解析爲布爾值

(Key1 = "foo" || key2 = 2 && key3 = "bar") && key4 = 7 

我設法寫一個函數來各的keyValue,對評估爲無論是「真」或「假」,並在更換他們字符串: 如:

(True || False && True) && True 

現在我想,解析字符串的布爾表達式。有什麼「簡單」的方法(內置函數,插件)的Javascript可以解析這個字符串?

+0

@BeyelerStudios'&'是一個按位與運算符。 – martin

+0

當然它&&感謝您的提示! 我改變了它的問題 – GuyWithCookies

+0

它從來不是布爾表達式我剛剛創建了一個正則表達式來獲取keyVal對並在JSON中搜索它們。該函數返回true或false,並將其寫回到String中。這只是我目前的做法。我願意接受任何更好的主意! – GuyWithCookies

回答

3

有其通常不建議使用,但也許在你的情況下,它是適合eval()。詳情參見:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

你可以寫:

eval("(true || false && true) && true") // Returns: 1 

注意,我不得不重寫Truetrue因爲True沒有一個公認的布爾表達式。

然而,作用域應用於eval(),所以我也可以這樣寫:

var True = 1; 
var False = 0; 
eval("(True || False && True) && True"); // Returns: 1 

這可能爲你工作,如果你事先知道我想的變量。否則,也許看看https://silentmatt.com/javascript-expression-evaluator/http://jsep.from.so/