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。。。