我有以下字符串<=10 & <20
,我想拆分这个字符串,所以它给出了以下结果('<=' '10' '<' '20')
, & 是无关紧要的,因为我在代码的不同区域处理它!谢谢
问问题
79 次
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 回答