返回美元金额正则表达式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