Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式将可选十进制数与可选度量标识符匹配_Javascript_Regex - Fatal编程技术网

JavaScript正则表达式将可选十进制数与可选度量标识符匹配

JavaScript正则表达式将可选十进制数与可选度量标识符匹配,javascript,regex,Javascript,Regex,我用我的正则表达式做到了这一点: /^(\+|\-|\/)*\d+?([kbmt]{1}|.\d{1,2})?$/gmi 它与以下数字匹配: 9 90 90.00 90.99 90k +9 -90 +90.00 -90.99 +90k +/-9 +/-90 +/-90.00 +/-90.99 +/-90k 但我也希望它能与这些相匹配: 90.00k 90.99k -90.00k +90.99k +/-90.00k +/-90.99k 如何清除需要匹配的剩余数字 这里有一把小提琴:试试这个:\+

我用我的正则表达式做到了这一点:

/^(\+|\-|\/)*\d+?([kbmt]{1}|.\d{1,2})?$/gmi
它与以下数字匹配:

9

90

90.00

90.99

90k

+9

-90

+90.00

-90.99

+90k

+/-9

+/-90

+/-90.00

+/-90.99

+/-90k

但我也希望它能与这些相匹配:

90.00k

90.99k

-90.00k

+90.99k

+/-90.00k

+/-90.99k

如何清除需要匹配的剩余数字


这里有一把小提琴:

试试这个:
\+?-?\/-9{0,2}0{0,1}.\k?

它会获取示例中的所有字符串,但如果有不同的数字,则可能需要进行一些调整

使用所有数字和度量标识符进行编辑:
\+?-?\/?\d{0,2}\d{0,1}.[kmbt]?
尝试以下操作:

^(\+|\-|\/)*\d+(\.\d{1,2})?[kbmt]?$
此外,您可能希望在开始时更具体地使用符号,这样您就不会匹配以下内容

+++2

这符合您给出的每个示例:

/^(?:[+-]|\+\/\-)?\d+(?:\.\d+)?[kbmt]?$/gim
它与
+++2
++-+-2
++-/-/+2
等不匹配。此外,我在需要分组的地方使用了非捕获子组,因为我相信您不在乎自己取回paren中的部分


演示和解释分解:

是的,很抱歉,数字可以是任意的。我只是用9作为例子。我错了!检查我的编辑,它应该考虑到这一点,以及度量标识符。这个答案仍然有重大问题。在一个示例中,
\+?-?\/?
正确匹配
+
-
,但不匹配
+/-
;而且它还匹配了几个无效的前缀(
+-/
+-
,-/
+/`和
/
)。您需要注意此处文章的格式。通过不对regex应用any,您改变了它的含义,并使它在语法上无效。您还组合了一些数字示例,例如,
9
90
变成了
9 90
。我知道你必须在某些东西上使用格式来使它们易读,这很烦人,但好处是值得的。几乎正是我要建议的!它纠正了所有的主要错误,但不应该是
[kbmt]
[kmgt]
(kilo、mega、giga、tera)?此外,您在Regex101上的小提琴选择了PCRE风格而不是JavaScript(OP也这样做了),并且您关闭了
i
修饰符。@Alanmore-谢谢——我已经更新了我回答中的“小提琴”和链接。不确定我是如何删除
I
的。我也注意到了它是PCRE,所以就把它放在一边,但是因为帖子的标签是JS,所以我已经把它改了。@RyanP13:好的,谢谢你帮我澄清。我的印象是这些是美元金额,但如果这是真的,将小数部分的
\d{1,2}
改为
\。\d+
可能是不正确的,不是吗?同意-问题留下了非常不清楚的地方,我认为OP对计数限制过于严格。如果数字与美元金额相同,则小数点后的部分应具有计数限制器。从技术上讲,它应该需要2,而不是允许1或2。。。