[英]JavaScript: Decimal part of a float is caught by integer regex
我试图区分用户的输入是浮点数还是整数 。 但是,当用户输入浮点数时 ,整个输入被认为是浮点数,但它的小数部分也被视为整数。 我不希望小数部分被视为整数。
用户的输入被添加到表中。
我们正在为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); }
[编辑]在完成其中一个建议之后,浮点数的整数部分现在被认为是另一个整数。
以下是您需要用于区分FLOAT / DECIMAL和INTEGER值的模式:
/(^|[^\d.])\b\d+\b(?!\.\d)/
要查找长字符串中的整数值,请参阅演示 。
要提取浮子,请使用
/(^|[^\d.])\d*\.\d+\b(?!\.\d)/
看这个演示 。
如果输入是多行的,请不要忘记添加/m
修饰符。
细节 :
(^|[^\\d.])
- 字符串锚点( ^
)或( |
)任何字符的开头,但是数字和.
(参见否定的字符类[^\\d.]
) \\b
- 领先的单词边界 \\d+
- 1+位数 \\b
- 尾随字边界 (?!\\.\\d)
- 如果有一个点后跟一个数字,则表示未通过匹配的负向前瞻 浮动正则表达式几乎相同但它需要一个.
在一个数字之前,它不需要一个前导词边界。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.