Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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_Currency - Fatal编程技术网

在Javascript中,使用字符串中的$将所有价格输入到一个数组中

在Javascript中,使用字符串中的$将所有价格输入到一个数组中,javascript,regex,currency,Javascript,Regex,Currency,如何将这3个价格放入一个数组?使用匹配和正则表达式如下: var string = 'Our Prices are $355.00 and $550, down form $999.00'; 正则表达式解释 /:正则表达式的分隔符 \$:匹配$文字 \d+:匹配一个或多个数字 ()?:匹配前面的零个或多个元素 \.:匹配 g:匹配所有可能匹配的字符 这将检查正则表达式“$”之后是否有可能的十进制数字 | |[]表示没有匹配项:它给出一个空数组,而不是null 比赛 $99 $.99 $9.

如何将这3个价格放入一个数组?

使用
匹配
正则表达式
如下:

var string = 'Our Prices are $355.00 and $550, down form $999.00';
正则表达式解释

  • /
    :正则表达式的分隔符
  • \$
    :匹配
    $
    文字
  • \d+
    :匹配一个或多个数字
  • ()?
    :匹配前面的零个或多个元素
  • \.
    :匹配
  • g
    :匹配所有可能匹配的字符
  • 这将检查正则表达式“$”之后是否有可能的十进制数字
    | |[]
    表示没有匹配项:它给出一个空数组,而不是
    null

    比赛
    • $99
    • $.99
    • $9.99
    • $9999
    • $9999.99
    解释
    为了更容易地匹配像
    .99
    这样的数字,我将第二个数字设为必填(
    \d+
    ),而将第一个数字(连同逗号)设为可选(
    \d*
    )。这意味着,从技术上讲,像
    $999
    这样的字符串与第二个数字(可选小数点后)匹配,这与结果无关 — 这只是一个技术问题。

    非正则表达式方法:拆分字符串并过滤内容:

    /         # Start RegEx
    \$        # $ (dollar sign)
    (         # Capturing group (this is what you’re looking for)
      (?:     # Non-capturing group (these numbers or commas aren’t the only thing you’re looking for)
        \d    # Number
        |     # OR
        \,    # , (comma)
      )*      # Repeat any number of times, as many times as possible
    \.?       # . (dot), repeated at most once, as many times as possible
    \d+       # Number, repeated at least once, as many times as possible
    )
    /         # End RegEx
    g         # Match all occurances (global)
    

    你已经试过什么了?其他一些Reg表达式,但它们只找到了第一个价格。@Ezra什么?为什么?你加入了
    g
    标志吗?我强烈反对。@UweKeim是的,我希望有其他的方式。但就像上面说的,“最后的手段”/这不是550美元的价格。哦,发现了一个问题。将不处理coma的定价,例如$1335.00,它将返回$1@Ezra您是否也需要投保1999美元(不包括例如
    .99
    )的险别?最好投保尽可能多的险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险别险。我想要1999.99美元来工作$1999@Ezra好的,我添加了一个简单的修复程序,并发布了正则表达式的完整解释。@Identity1您能解释一下吗?@Identity1它能解释。请参阅
    演示
    string.match(/\$((?:\d|\,)*\.?\d+)/g) || []
    
    /         # Start RegEx
    \$        # $ (dollar sign)
    (         # Capturing group (this is what you’re looking for)
      (?:     # Non-capturing group (these numbers or commas aren’t the only thing you’re looking for)
        \d    # Number
        |     # OR
        \,    # , (comma)
      )*      # Repeat any number of times, as many times as possible
    \.?       # . (dot), repeated at most once, as many times as possible
    \d+       # Number, repeated at least once, as many times as possible
    )
    /         # End RegEx
    g         # Match all occurances (global)
    
    var arr = string.split(' ').filter(function(val) {return val.startsWith('$');});