[1-9]\d{0,2}(,\d{1,3})+(\.\d+)?
buy a sport car 1,000,000.25
将匹配此正则表达式。 ,
和.
符号交换了)[1-9]\d{0,2}(\.\d{1,3})+(,\d+)?
buy a sport car 1.000.000,25
将匹配此正则表达式
这就是我要的:
buy a house 1.234.532.727,94 in October
它匹配两个正则表达式。 2.45 buy a song
。 buy a house 1.234.532.727,94 in October
,如何提取此字符串:1.234.532.727,94
? 我应该如何纠正我的正则表达式以获得我想要的东西?
答案 0 :(得分:1)
对于问题的第二部分,要使英语区域设置正则表达式匹配2.45
,您只需将逗号用语(,\d{1,3})
设为可选:
[1-9]\d{0,2}(,\d{1,3})*(\.\d+)?
^^^ change + to *
对于您的第一个问题,我认为您的单独的正则表达式已经正确地过滤掉了英语或越南语语言环境,q.v。以下两个演示。我唯一需要做的就是添加锚点^
和$
。
<强>更新强>
如果要从以下句子中提取英语区域设置编号:
buy books 12.45 at school
然后你可以试试这段代码:
var regex = /.*(?:\s+|^)([1-9]\d{0,2}(?:,\d{1,3})*(?:\.\d+)?)(?:\s+|$).*/g;
var matches = regex.exec("buy books 12.45 at school");
console.log(matches[1]);
答案 1 :(得分:1)
如果一个数字与英文编号正则表达式匹配,则它不应该匹配 越南号正则表达式
使用开始^
并结束$
两个正则表达式,所以
/^[1-9]\d{0,2}(,\d{1,3})+(\.\d+)?$/.test( "1.234.532.727,94" ) ; //false
鉴于英国正则表达式的情况,我现在的英语正则表达不可能 匹配此字符串:2.45
这是因为(,\d{1,3})+
需要至少出现一个3位数,所以(,\d{1,3})*
/^[1-9]\d{0,2}(,\d{1,3})*(\.\d+)?$/.test( "2.45" ); //true
修改强>
正如@RobG在下面指出的那样,如果您想要处理0,000.123
和0.123
等方案,请将初始[1-9]\d{0,2}
替换为\d{1,3}
例如
/^\d{1,3}(,\d{1,3})*(\.\d+)?$/.test( "0,000.123" ); //true
/^\d{1,3}(,\d{1,3})*(\.\d+)?$/.test( "0.123" ); //true
修改2
如果必须是String的一部分,则在正则表达式周围加上字边界而不是开始和结束符号。
/\b\d{1,3}(,\d{1,3})*(\.\d+)?\b/.test( "asd 0,000.123 sad" ); //true
^
和$
被\b
编辑3
使用此方法
var input = "buy a house 1.234.532.727,94";
var matches = input.split(" ").filter( function( item ) { return item.match( /(\d{1,3}(,\d{1,3})*(\.\d+)?)/g ) });
console.log( matches );
&#13;
答案 2 :(得分:1)
为此目的的最佳正则表达式将是
(?:^|\s)(\d{1,3}(?:,\d{3})*(?:\.\d+)?)(?!\S)
请参阅regex demo。
(?:^|\s)
匹配字符串的开头或数字前面的空格,(?!\S)
匹配数字后面的whitepsace或字符串结尾,而不消耗它们。
JS演示:
var rx = /(?:^|\s)(\d{1,3}(?:,\d{3})*(?:\.\d+)?)(?!\S)/g;
var str = "buy a sport car 1,000,000.25 1.000.000,25 2,000,000.25 3,000,000.25 test 2.45 and reject test 2,45";
var res=[], m;
while (m = rx.exec(str)) {
res.push(m[1]);
}
console.log(res);