Javascript 在字符串中查找十进制数的正则表达式
我试图搜索一个嵌入了十进制数的字符串。数字使用逗号表示(百/千分隔符),点表示小数分隔符 无效十进制数示例:Javascript 在字符串中查找十进制数的正则表达式,javascript,regex,Javascript,Regex,我试图搜索一个嵌入了十进制数的字符串。数字使用逗号表示(百/千分隔符),点表示小数分隔符 无效十进制数示例: .33、.333(数字前面必须至少有一位数字,尽管是零) 1,22,33.33,1,22.333(逗号分隔数字的最后一段必须有3个数字) .3、.3333(小数后必须有2或3位数字) ,0.33(十进制数字不得以逗号开头) 有效十进制数示例: 0.33和10.333 1,22333.33和1222.333 特殊情况:如果字符串类似于“You a/c bal.33.33”。结果应该
- .33、.333(数字前面必须至少有一位数字,尽管是零)
- 1,22,33.33,1,22.333(逗号分隔数字的最后一段必须有3个数字)
- .3、.3333(小数后必须有2或3位数字)
- ,0.33(十进制数字不得以逗号开头)
- 0.33和10.333
- 1,22333.33和1222.333
我尝试了以下正则表达式:
(((\\d+\\,)+\\d{3})|([^,]\\d+))\\.\\d{2,3}(?!\\.\\d)
^\d+((,\d+)*,\d{3})?\.\d{2,3}$
它适用于所有情况,但当数字有前导逗号时失败 只需使用以下正则表达式即可:
(((\\d+\\,)+\\d{3})|([^,]\\d+))\\.\\d{2,3}(?!\\.\\d)
^\d+((,\d+)*,\d{3})?\.\d{2,3}$
您可以将捕获组用作
/(?:[^\d,]|^)(\d+(?:(?:,\d+)*,\d{3})?\.\d{2,3})\b/
- 捕获组1,
将在字符串中包含十进制数(\d+(?:(?:,\d+*,\d{3})\。\d{2,3})\b
确保捕获组正确捕获整个数字,而不是其中的一部分(?:[^\d,]|^)
var str = "0.33";
var matches = str.match(/(?:[^\d,]|^)(\d+(?:(?:,\d+)*,\d{3})?\.\d{2,3})\b/);
console.log(matches[1])
=> 0.33
var str = "You a/c bal.33.33"
var matches = str.match(/(?:[^\d,]|^)(\d+(?:(?:,\d+)*,\d{3})?\.\d{2,3})\b/);
console.log(matches[1])
=> 33.33
不,它必须有小数部分。参见无效示例3。那么
1,2,3,4,5666.78
是否有效?@anubhava:是,在上面给出的示例中。理想情况下,只有第一段可以有一位数字,中间的所有段都应该有2或3位数字,但最后一段必须有3位数字。正如您在无效十进制数的最后一点中所说,当数字有前导逗号时,它必须失败,那么问题是什么?太棒了。但在上述特殊情况下失败。谢谢!它工作得很好。@closure很高兴听到它有帮助:D.请确保使用if(matches)
语句来处理字符串与正则表达式不匹配的情况。此匹配号如1222.3&1222.3556&1,22333444。15@VasilNikolov哎呀,没听到。回答中更正。谢谢你指出。