繁体   English   中英

JavaScript:float的十进制部分由整数正则表达式捕获

[英]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); } 

我们的LOLCode解释器

[编辑]在完成其中一个建议之后,浮点数的整数部分现在被认为是另一个整数。

编辑后的口译员

以下是您需要用于区分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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM