Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在字符串中查找十进制数的正则表达式_Javascript_Regex - Fatal编程技术网

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
特殊情况:如果字符串类似于“You a/c bal.33.33”。结果应该是33.33


我尝试了以下正则表达式:

 (((\\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哎呀,没听到。回答中更正。谢谢你指出。