我试图区分用户的输入是 float 还是整数。但是,当用户输入 float 时,整个输入被视为浮点数,但十进制部分也被视为整数。我不希望小数部分被视为整数。
用户的输入被添加到表格中。
我们正在为LOLCode制作翻译。我们在如何进行变量声明和初始化方面遇到了困难。
if(/(I\sHAS\sA)\s[a-zA-Z_$][0-9a-zA-Z_$]*\sITZ\s.*/i.test(entry)){
if(/(I\sHAS\sA)\s[a-zA-Z_$][0-9a-zA-Z_$]*\sITZ\s.*/i.test(entry)){
var desc = "Variable Declaration";
var lex = /I\sHAS\sA/i.exec(entry);
addToLexer(lex, desc);
}
if(/(I\sHAS\sA)\s[a-zA-Z_$][0-9a-zA-Z_$]*\sITZ\s.*/i.test(entry)){
var string = /(I\sHAS\sA)\s[a-zA-Z_$][0-9a-zA-Z_$]*\sITZ\s.*/i.exec(entry);
var desc = "Variable name";
var lex = /[^(I\sHAS\sA)\s]+/.exec(string);
addToLexer(lex, desc);
}
if(/.+ITZ\s.*/i.test(entry)){
var string = /.+ITZ\s.*/i.exec(entry);
var desc = "Initialization";
var lex = /ITZ/i.exec(string);
addToLexer(lex, desc);
}
}
if(/^[-+]?\d+$/i.test(entry)){
var desc = "Integer Literal";
var lex = /[-+]?\d+$/i.exec(entry);
addToLexer(lex, desc);
}
if(/^[-+]?\d*\.\d*$/i.test(entry)){
var desc = "Float Literal";
var lex = /[-+]?[0-9]*\.?[0-9]+$/i.exec(entry);
addToLexer(lex, desc);
}

[编辑]执行其中一个建议之后,浮点数的整数部分现在被认为是另一个整数。
答案 0 :(得分:0)
以下是您需要用来区分FLOAT / DECIMAL和INTEGER值的模式:
/(^|[^\d.])\b\d+\b(?!\.\d)/
要查找长字符串中的整数值,请参阅demo。
要提取浮点数,请使用
/(^|[^\d.])\d*\.\d+\b(?!\.\d)/
请参阅this demo。
如果输入是多行的,请不要忘记添加/m
修饰符。
<强>详情:
(^|[^\d.])
- 字符串锚点(^
)或(|
)的开头,但是数字和.
的任何字符(请参阅否定的字符类[^\d.]
})\b
- 领先的字边界\d+
- 1+位数\b
- 尾随字边界(?!\.\d)
- 如果有一个点跟着一个数字 float regex几乎相同但在数字前需要.
并且它不需要前导词边界。