匹配浮动但不是以点分隔的日期

时间:2018-05-16 17:38:09

标签: javascript regex

我试图构建一个可以在字符串中找到浮点数(使用点或逗号作为小数点分隔符)的正则表达式。我最终得到了以下内容:

/([0-9]+[.,]{1}[0-9]+)/g

这似乎工作正常,期望它匹配由.分隔的日期:

02.01.2000 // Matches 12.34

我已经尝试了([0-9]+[.,]{1}[0-9]+)(?![.,]),但这并不像我预期的那样有效:)

如何省略日期大小写,但仍然通过以下方案:

I tried some stuff 12.23
D12.34
12.34USD
2.3%
12,2
\n12.1

2 个答案:

答案 0 :(得分:1)

你想确保它没有被更多“,”包围。或数字。是吗?

/[^,.0-9]([0-9]+[.,]{1}[0-9]+)[^,.0-9]/g

鉴于以下内容:

hi 1.3$ is another 1.2.3
This is a date 02.01.2000
But this 5.30USD is a number.
But a number at the end of a sentance 1.7.
Or a number comma number in a list  4,3,4,5.

它将匹配“1.3”和“5.30”

使用@ anubhava的示例(?:\d+\.){2}\d+|(\d+[.,]\d+)您将获得以下结果: 它将匹配“1.3”,“5.30”,“1.7”,“4,3”和“4,5”

故事的道德是你需要思考所有可能的场景,并了解你想如何对待每个场景。最后一行应该是4个数字的列表。但是“4,3”本身是两个单独的数字,还是来自一个用逗号来表示小数的国家?

答案 1 :(得分:1)

您可以使用此替换使用此正则表达式:

(?:\d+\.){2}\d+|(\d+[.,]\d+)

从捕获的组#1中提取您的匹配

这个正则表达式基本匹配并丢弃交替的LHS上的日期字符串,然后在交替的RHS上匹配和捕获浮点数。

RegEx Demo

<强>代码:

&#13;
&#13;
const regex = /(?:\d+\.){2}\d+|(\d+[.,]\d+)/gm;
const str = `I tried some stuff 12.23
D12.34
12.34USD 02.01.2000
2.3%
12,2 02.01.2000
\\n12.1`;
let m;
let results = [];

while ((m = regex.exec(str)) !== null) {
  if (m[1])
    results.push( m[1] );
}

console.log(results);
&#13;
&#13;
&#13;