2017-06-20 44 views
0

我想通過在sTest_Val_1(「30」)變量中放置一個值來獲得True或False值。如何將「sTest_Val_1 <50」字符串拆分爲「sTest_Val_1」,「<」,「50」

所以我們嘗試分離和分離變量和運算符。

起初我使用了下面的源代碼。

但是,此源代碼引起了問題,因爲它也將sTest_Val_1中的「_」分開。

由於變量中的特殊字符,我無法正確拆分。所以我不能在變量中加入「30」的值。

var expression = "sTest_Val_1 < 50"; //or "sTest_Val_1<50" 
var copy = expression; //"sTest_Val_1 < 50" 

expression = expression.replace(/[0-9a-zA-Z]+/g, "#"); //"#_#_# < #" 
var numbers = copy.split(/[^0-9a-zA-Z\.]+/); //[sTest,Val,1,50] 
var operators = expression.split("#").filter(function (n) { return n }); //[_,_, < ] 
var result = []; 
var sRst = ""; 

result.push(numbers[i]); 
sRst += numbers[i]; 
if (i < operators.length) { 
    result.push(operators[i]); 
    sRst += operators[i]; 

console.log(sRst); 
return eval(sRst); // I want True, False 

sTest_Val_1的值在另一個頁面中定義。 (我得到這個值來加載的第一頁時,JavaScript對象。)

string sTest_Val_1 = "30"; 
string sTest_Val_2 = "30"; 
string sTimeVal_1 = "65380"; 
// .... 

「sTest_Val_1」此值只能包含在第一個字符字母字符。

但是,字符的長度是隨機的,字符中的特殊字符也是隨機的。不包括 (<,>,+, - 和= =)

我的英語不夠好。敬請諒解。

+0

斯普利特空間? – Weedoze

+0

但我無法確定輸入的是空格。 – cherryJang

+1

不能按運營商分割嗎? – Fallenhero

回答

0

您可以使用RegEx查找操作員的位置,而無需知道確切的操作員。 /<|>|\+|\-|=|&&/將匹配<,>,+,=或& &

var expression = "sTest_Val_1 < 50"; //or "sTest_Val_1<50" 
var regResult = /<|>|\+|\-|=|&&/.exec(expression); //match <, >, +, = or && 
if(!regResult.length){ //regResult is an array containing the operators found 
    // handle no operator found 
} 
var opIdx = regResult.index; //the index of the first found operator 
var op = regResult[0]; 
var variable = expression.substring(0, opIdx).trim(); //split until operator and trim whitespaces 
var value = expression.substring(opIdx + op.length, expression.length).trim(); //split after operator and trim whitespaces 

注意:如果你是在表達希望多個運營商,你可能遍歷regResult和應該做一些修改字符串參數。

此外,使用evalis a bad ideea,我會建議您在操作員上進行切換並正確檢查條件以返回操作結果。

+0

謝謝!另外,感謝讓我知道eval是一個壞主意。你的意思是使用開關? – cherryJang

+0

@cherryJang我不完全確定你想評估什麼,但是如果你可以使用開關和/或ifs,你應該。 –

+0

哦! 「sTest_Val_1 <50 && sTest_Val_2 <50」這可能嗎? – cherryJang

0

您可以由操作員(保留操作員)與捕獲組分開。

expression = "sTest_Val_1 < 50" 
expression.split(/(<|>|\+|\-|=|&&)/) 

將導致["sTest_Val_1 ", "<", " 50"]

+0

哦,謝謝你的回答!這也有幫助。 – cherryJang

相關問題