返回美元金额正则表达式javascript

返回美元金额正则表达式javascript,javascript,Javascript,我提取了这个字符串,我正试图返回美元金额 var str = "5 Iphones in stock at $299 on 11/26"; var strNew = str.match(/^\$?[0-9]+/g); strIwant = "$299" 它可以工作,但并不总是如此,当有多个数字时,它似乎返回null,如上面的示例所示,有其他方法可以做到这一点吗?如果要捕获“$299”,必须使用“()”中的换行符 如果美元总是必要的,那么就不需要“?”了 最后,如果它的数量可以在字符串的任何部分

我提取了这个字符串,我正试图返回美元金额

var str = "5 Iphones in stock at $299 on 11/26";
var strNew = str.match(/^\$?[0-9]+/g);
strIwant = "$299"
它可以工作,但并不总是如此,当有多个数字时,它似乎返回null,如上面的示例所示,有其他方法可以做到这一点吗?

如果要捕获“$299”,必须使用“()”中的换行符

如果美元总是必要的,那么就不需要“?”了

最后,如果它的数量可以在字符串的任何部分,那么“^”是wron

然后,strNew现在是匹配值的数组。strNew=
[“$299”]


然后strNew=
[“$299”,“$199”]

您正在测试的正则表达式表明模式必须从字符串的开头开始(通过
^
字符),这可能解释了为什么您正在测试的示例字符串有时会返回
null

就匹配整美元金额(不含小数和美分)而言,
\$[0-9]+
应该足够了。下面是工作示例代码,它似乎适合您的需要:

var strs = ["5 Iphones in stock at $299 on 11/26 and $500 on 11/27", 
            "5 Iphones in stock at $299 on 11/26",
            // this would be matched with your original regex
            "$200 worth of Iphones in stock at $299 on 11/26 and $500 on 11/27"];

strs.forEach(function(v) { console.log(v.match(/\$[0-9]+/g)); })
将我预期的结果打印到控制台上

["$299", "$500"]
["$299"]
["$200", "$299", "$500"]
试一试

如果奖品为整数,则返回美元金额

/\$(\d+)(\.\d+)?/g

如果奖品是浮点数或整数,则返回美元金额。如果奖品是浮动的,那么奖品将是两个Arrya,一个是美元,一个是美分。

为什么不只是,
\$[0-9]+
作为模式?谢谢你解释我的错误。@Matt不用担心,学习正则表达式的最好方法就是不断练习它们。在旁注中,看一看有助于说明您的表达式在做什么,以帮助确定它不起作用的原因。
["$299", "$500"]
["$299"]
["$200", "$299", "$500"]
/\$(\d+)/g
/\$(\d+)(\.\d+)?/g