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

时间:2016-11-28 08:34:17

标签: javascript regex floating-point integer

我试图区分用户的输入是 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);
}




Our LOLCode Interpreter

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

Interpreter after the edit

1 个答案:

答案 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几乎相同但在数字前需要.并且它不需要前导词边界。