我试图区分用户的输入是浮点数还是整数。但是,当用户输入浮点数时,整个输入被视为浮点数,但其小数部分也被视为整数。我不希望小数部分被视为整数。
用户的输入将添加到表中。
我们正在为LOLCode制作口译员。我们在如何进行变量声明和初始化方面遇到了困难。
if(/(IsHASsA)s[a-zA-Z_$][0-9a-zA-Z_$]*sITZs.*/i.test(entry)){
if(/(IsHASsA)s[a-zA-Z_$][0-9a-zA-Z_$]*sITZs.*/i.test(entry)){
var desc = "Variable Declaration";
var lex = /IsHASsA/i.exec(entry);
addToLexer(lex, desc);
}
if(/(IsHASsA)s[a-zA-Z_$][0-9a-zA-Z_$]*sITZs.*/i.test(entry)){
var string = /(IsHASsA)s[a-zA-Z_$][0-9a-zA-Z_$]*sITZs.*/i.exec(entry);
var desc = "Variable name";
var lex = /[^(IsHASsA)s]+/.exec(string);
addToLexer(lex, desc);
}
if(/.+ITZs.*/i.test(entry)){
var string = /.+ITZs.*/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);
}
我们的 LOLCode 口译员
[编辑] 在执行其中一个建议后,浮点数的整数部分现在被视为另一个整数。
编辑后的口译员
以下是区分 FLOAT/DECIMAL 和 INTEGER 值所需的模式:
/(^|[^d.])bd+b(?!.d)/
若要查找长字符串中的整数值,请参阅 Demo。
要提取浮点数,请使用
/(^|[^d.])d*.d+b(?!.d)/
请参阅此演示。
如果输入是多行的,请不要忘记添加/m
修饰符。
详情:
(^|[^d.])
- 字符串锚点(^
)或(|
)除数字和.
以外的任何字符的开头(请参阅否定字符类[^d.]
)b
- 前导词边界d+
- 1+ 位数字b
- 尾随词边界(?!.d)
- 如果有一个点后跟一个数字,则负前瞻失败
浮点正则表达式几乎相同,但它需要在数字之前有一个.
,并且不需要前导词边界。