2017-06-20 5 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

関連する問題