我有这个提取的字符串,我试图返回美元金额。
var str = "5 Iphones in stock at $299 on 11/26";
var strNew = str.match(/^\$?[0-9]+/g);
strIwant = "$299"
它的工作原理但并非总是如此,当上面的示例中有多个数字时,它似乎返回null,是否有其他方法可以执行此操作?
答案 0 :(得分:0)
如果你想赶上" $ 299"你必须在"()"
中使用表达式如果总是需要美元,那么"?"不需要
最后,如果它的数量可以在字符串的任何部分,那么" ^"是wron
var str = "5 Iphones in stock at $299 on 11/26";
var strNew = str.match(/(\$[0-9]+)/g);
然后,strNew现在是匹配值的数组。 strNew = ["$299"]
var str = "5 Iphones in stock at $299 on 11/26 and $199 off";
var strNew = str.match(/(\$[0-9]+)/g);
然后strNew = ["$299", "$199"]
;
答案 1 :(得分:0)
您正在测试的正则表达式表示该模式必须从字符串的开头开始(通过^
字符),这可以解释为什么您要测试的示例字符串有时会返回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"]
答案 2 :(得分:0)
尝试
/\$(\d+)/g
如果奖品是整数,则返回美元金额。
/\$(\d+)(\.\d+)?/g
如果奖品是浮点数或整数,则返回美元金额。如果奖金是浮动的,那么将是两个arryas,一个是美元金额,另一个是美分金额。