我试图构建一个可以在字符串中找到浮点数(使用点或逗号作为小数点分隔符)的正则表达式。我最终得到了以下内容:
/([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
答案 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上匹配和捕获浮点数。
<强>代码:强>
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;