使用.test()的RegEx误报

时间:2015-12-02 22:30:25

标签: javascript regex

我正在制作Chrome扩展程序,在页面上搜索一个美元金额(一个不超过两位小数的数字,后面紧跟一个" $")然后点击一下这个价值在另一种货币中的价值。我找到了一个常用的正则表达式,它与那些参数完全匹配。

/^\$?\-?([1-9]{1}[0-9]{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\-?\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\(\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))\)$/g

所以我认为我有一个很好的开端。我只编写了几个月的编码和我遇到的所有概念,正则表达式让我头疼。我用以下方法测试了我闪亮的新表达式:

var regex = /^\$?\-?([1-9]{1}[0-9]{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\-?\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\(\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))\)$/g;

var str = "The total it $2.25 Would you like paper or plastic?";

r = regex.test(str);
console.log(r);

当然那个吸盘返回错误!我用" 2.25"尝试了几个字符串。或" $ 2"或" $ 2.256"只是为了确定,他们都返回了假。

我彻底难倒了。建议使用表达式,我正确使用.test()。我能想到的只是它可能是一些与正则表达式无关的新鲜细节。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

您过于复杂的正则表达式正在检查整个字符串。删除^$,分别表示字符串的开头和结尾。然后删除/g标志,该标志用于搜索多个匹配项。

checking for /\$\d+\.\d\d/出了什么问题?

我发现http://regex101.com/是一个有用的资源。