我正在制作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()。我能想到的只是它可能是一些与正则表达式无关的新鲜细节。
感谢您的时间。
答案 0 :(得分:1)
您过于复杂的正则表达式正在检查整个字符串。删除^
和$
,分别表示字符串的开头和结尾。然后删除/g
标志,该标志用于搜索多个匹配项。
checking for /\$\d+\.\d\d/
出了什么问题?
我发现http://regex101.com/是一个有用的资源。