Regex 使用缩写准备数字

Regex 使用缩写准备数字,regex,apache-flex,Regex,Apache Flex,这是我以前的职位。 我想用缩写来建立一个数字,当然也要用正则表达式 现在我知道了如何使用BMTH缩写来验证数字 现在,我的下一个也是最后一个目标是使用缩写词构建一个数字。 e、 g.-2T2H22.55应显示为-2222.55 -2M2H22.63应显示为-2000222.63 感谢您的帮助。Flex的脚本语言ActionScript是一种类似JavaScript的ECMAScript实现,因此正则表达式文本必须用斜杠分隔,例如:/^(?:\d+B)?(?:\d{1,3}M)?(?:\d{1,3

这是我以前的职位。 我想用缩写来建立一个数字,当然也要用正则表达式

现在我知道了如何使用BMTH缩写来验证数字

现在,我的下一个也是最后一个目标是使用缩写词构建一个数字。 e、 g.-2T2H22.55应显示为-2222.55 -2M2H22.63应显示为-2000222.63


感谢您的帮助。

Flex的脚本语言ActionScript是一种类似JavaScript的ECMAScript实现,因此正则表达式文本必须用斜杠分隔,例如:
/^(?:\d+B)?(?:\d{1,3}M)?(?:\d{1,3}T)?(?:\d{1}H)?(\.[0-9]*)?/

但这个正则表达式仍然存在一些问题。首先,你不能解释减号或百位后面的两位数。而且,虽然小数点可能是可选的,但如果存在小数点,您应该要求它后面至少有一位数字(因此
+
,而不是最后一组中的
*

最后,您需要捕获各种组件,以便使用它们来构造数字。以下是我的结果:

/^(-?)(?:(\d+)B)?(?:(\d{1,3})M)?(?:(\d{1,3})T)?(?:(\d)H)?(\d{0,2})(\.\d+)?$/

减号(如果存在)将在组
$1
中捕获。其余的组件将分组
$2
$7
。您可以在回调函数中使用它们来构造数字。另外,请注意,这个正则表达式中的所有内容都是可选的;它将匹配一个空字符串或一个连字符,因此您需要检查它。

Flex的脚本语言ActionScript是一种类似JavaScript的ECMAScript实现,因此正则表达式文本必须用斜杠分隔,例如:
/^(?:\d+B)(?:\d{1,3}M)(?:\d{1,3}T)(?:\d{1}H)(\.[0-9]*)/

但这个正则表达式仍然存在一些问题。首先,你不能解释减号或百位后面的两位数。而且,虽然小数点可能是可选的,但如果存在小数点,您应该要求它后面至少有一位数字(因此
+
,而不是最后一组中的
*

最后,您需要捕获各种组件,以便使用它们来构造数字。以下是我的结果:

/^(-?)(?:(\d+)B)?(?:(\d{1,3})M)?(?:(\d{1,3})T)?(?:(\d)H)?(\d{0,2})(\.\d+)?$/

减号(如果存在)将在组
$1
中捕获。其余的组件将分组
$2
$7
。您可以在回调函数中使用它们来构造数字。另外,请注意,这个正则表达式中的所有内容都是可选的;它将匹配一个空字符串或一个连字符,因此您需要检查它。

您使用的是什么编程语言?我使用的是Flex。看起来Flex有点问题。我创建了这个表达式^(?:\d+B)?(?:\d{1,3}M)?(?:\d{1,3}T)?(?:\d{1}H)?(\.[0-9]*)?它在RegExr中运行良好,但在Flex中从未运行过。我不知道Flex及其使用的regex引擎。您可以尝试避免非捕获组,即删除
?:
。然后,捕获的值将存储到变量中(您不必使用它们)。这是我认为唯一有问题的地方。你用的是什么编程语言?我用的是Flex。看起来Flex有点问题。我创建了这个表达式^(?:\d+B)?(?:\d{1,3}M)?(?:\d{1,3}T)?(?:\d{1}H)?(\.[0-9]*)?它在RegExr中运行良好,但在Flex中从未运行过。我不知道Flex及其使用的regex引擎。您可以尝试避免非捕获组,即删除
?:
。然后,捕获的值将存储到变量中(您不必使用它们)。这是我认为唯一有问题的问题。哇,非常详细的答案。好乔布;)哇,非常详细的回答。好乔布;)