-2

我有以下字符串<=10 & <20,我想拆分这个字符串,所以它给出了以下结果('<=' '10' '<' '20'), & 是无关紧要的,因为我在代码的不同区域处理它!谢谢

4

4 回答 4

4

您可以使用正则表达式。您的问题的可能示例:

"<=10 & <20".match(/(([<=>]+)|(\d+))/g)

准确返回您需要的内容:

["<=", "10", "<", "20"]

当然,最终的正则表达式取决于您的字符串可能具有的运算符

如果您还需要支持负值,您可以将表达式更改为:

"<=10 & <-20".match(/(([<=>]+)|(-?\d+))/g)

结果:

["<=", "10", "<", "-20"]
于 2013-08-16T13:07:12.537 回答
1

似乎您不想像编译器那样标记字符串。如果您已经上过计算机科学课程,那么您应该具备词法分析的知识。简而言之,您需要一个状态机以灵活的方式对字符串进行标记。我没有看到解决此要求的另一种方法。

只是算法的一瞥:

var tokens = new Array();
var inputStr ...;

... a lot of state variables

var currentState = LexicalAnalysisStates.START;

for (var i = 0; i < inputStr.length; i++) { 
  var nextChar = input.charAt(i);
  switch (currentState) {
  case LexicalAnalysisStates.START: ...; // process nextChar considering START state
  case LexicalAnalysisStates.DIGIT: ...; // process nextChar considering DIGIT state
  case LexicalAnalysisStates.EQUAL: ...; // process nextChar considering EQUAL state
  }
}

... here you should have your token collection populated

提示:首先绘制最终状态机的草图,比如这个

编辑:在 Artem 发表评论后将代码更新为 Javascript 语法。

于 2013-08-16T13:13:29.890 回答
0

这是你想要做的吗?

var str;

str = '<=10';
str.match(/([^0-9]+)([0-9]+)/); // ["<=10", "<=", "10"]

str = '<20';
str.match(/([^0-9]+)([0-9]+)/); // ["<20", "<", "20"]
于 2013-08-16T13:08:00.533 回答
0

这应该做你所追求的(确保正确的语法>= <= > <):

"<=10 & <20".match(/(<|>)=?|(\d+)/g);//["<=", "10", "<", "20"]
于 2013-08-16T13:10:36.070 回答