JavaScript:浮点数的小数部分被整数正则表达式捕获



我试图区分用户的输入是浮点数还是整数。但是,当用户输入浮点数时,整个输入被视为浮点数,但其小数部分也被视为整数。我不希望小数部分被视为整数。

用户的输入将添加到表中。

我们正在为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)- 如果有一个点后跟一个数字,则负前瞻失败

浮点正则表达式几乎相同,但它需要在数字之前有一个.,并且不需要前导词边界。

最新更新