如何分割" sTest_Val_1< 50"字符串到" sTest_Val_1","<"," 50"

时间:2017-06-20 06:34:32

标签: javascript regex

我希望通过在sTest_Val_1(" 30")变量中放置一个值来获得True或False值。

因此我们尝试拆分和分离变量和运算符。

起初我使用了以下源代码。

然而,这个源代码引起了问题,因为它也在分裂" _"来自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";
// ....

&#34; sTest_Val_1&#34;该值只能包含第一个字符中的字母字符。

但是,字符的长度是随机的,字符中的特殊字符也是随机的。 (&lt;,&gt;,+, - 和=不包括在内。)

我的英语不够好。请理解。

2 个答案:

答案 0 :(得分:0)

您可以使用RegEx查找操作员的位置,而无需了解确切的操作符。 /<|>|\+|\-|=|&&/将匹配&lt ;,&gt;,+,=或&amp;&amp;

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并对子字符串参数进行一些修改。

此外,使用eval is a bad ideea,我建议您切换操作员并正确检查条件以返回操作结果。

答案 1 :(得分:0)

您可以通过操作员(保留操作员)与捕获组进行拆分。

let Str = result.value(forKey: "variant")as! [Any]
let objColor = Str[0] as! [String : Any]
let StrColor = objColor["Color"]  as! String
let string = String(describing: StrColor)

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