Javascript 以不同的格式匹配数字 我有一个用英语写的匹配号码的正则表达式: [1-9]\d{0,2}(,\d{1,3})+(\.\d+) 例如,购买一辆跑车1000000.25将匹配此正则表达式 我还有一个用我的语言写的匹配数字的正则表达式(越南语-基本上是,和,符号被交换) [1-9]\d{0,2}(\.\d{1,3})+(,\d+) 例如,购买一辆跑车1.000.000,25将匹配此正则表达式。 这就是我想要的: 如果一个数字与英文数字regex匹配,则它不应与越南语数字regex匹配。然而,在这样复杂的情况下:在10月份买房子1.234.532.727,94它匹配两个正则表达式 考虑到英语正则表达式的情况,我当前的英语正则表达式无法匹配以下字符串:2.45购买歌曲 从这个字符串:在10月份买房子1.234.532.727,94,如何提取这个字符串:1.234.532.727,94

Javascript 以不同的格式匹配数字 我有一个用英语写的匹配号码的正则表达式: [1-9]\d{0,2}(,\d{1,3})+(\.\d+) 例如,购买一辆跑车1000000.25将匹配此正则表达式 我还有一个用我的语言写的匹配数字的正则表达式(越南语-基本上是,和,符号被交换) [1-9]\d{0,2}(\.\d{1,3})+(,\d+) 例如,购买一辆跑车1.000.000,25将匹配此正则表达式。 这就是我想要的: 如果一个数字与英文数字regex匹配,则它不应与越南语数字regex匹配。然而,在这样复杂的情况下:在10月份买房子1.234.532.727,94它匹配两个正则表达式 考虑到英语正则表达式的情况,我当前的英语正则表达式无法匹配以下字符串:2.45购买歌曲 从这个字符串:在10月份买房子1.234.532.727,94,如何提取这个字符串:1.234.532.727,94,javascript,regex,numbers,separator,Javascript,Regex,Numbers,Separator,我应该如何更正我的正则表达式以得到我想要的?对于问题的第二部分,要使英语区域设置正则表达式匹配2.45只需将逗号术语(,\d{1,3})设置为可选: [1-9]\d{0,2}(,\d{1,3})*(\.\d+)? ^^^ change + to * 对于你的第一个问题,我认为你单独的正则表达式已经正确地过滤出了英语或越南语的语言环境,请看下面的两个演示。我唯一需要做的就是添加锚定^和$ 更新: 如果要从以下句子中提取英语语言环境编号: buy bo

我应该如何更正我的正则表达式以得到我想要的?

对于问题的第二部分,要使英语区域设置正则表达式匹配
2.45
只需将逗号术语
(,\d{1,3})
设置为可选:

[1-9]\d{0,2}(,\d{1,3})*(\.\d+)?
                     ^^^ change + to *
对于你的第一个问题,我认为你单独的正则表达式已经正确地过滤出了英语或越南语的语言环境,请看下面的两个演示。我唯一需要做的就是添加锚定
^
$

更新:

如果要从以下句子中提取英语语言环境编号:

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]);

对于问题的第二部分,要使英语区域设置正则表达式与
2.45
匹配,只需将逗号术语
(,\d{1,3})设置为可选项即可

[1-9]\d{0,2}(,\d{1,3})*(\.\d+)?
                     ^^^ change + to *
对于你的第一个问题,我认为你单独的正则表达式已经正确地过滤出了英语或越南语的语言环境,请看下面的两个演示。我唯一需要做的就是添加锚定
^
$

更新:

如果要从以下句子中提取英语语言环境编号:

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]);

如果一个数字与英文数字regex匹配,则不应与 越南语数字正则表达式

对这两个正则表达式都使用start
^
和end
$
,因此

/^[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})*

编辑

正如@RobG在下面指出的,如果您想处理像
0000.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

如果这必须是字符串的一部分,则在正则表达式周围放置一个字边界,而不是开始和结束符号

/\b\d{1,3}(,\d{1,3})*(\.\d+)?\b/.test( "asd 0,000.123 sad" ); //true
^
$
替换为
\b

编辑3

使用这种方法

var input=“买房1.234.532.727,94”;
var matches=input.split(“”).filter(函数(项){return item.match(/(\d{1,3}(,\d{1,3})*(\.\d+))/g)});
console.log(匹配项)
如果一个数字与英文数字regex匹配,则不应与
越南语数字正则表达式

对这两个正则表达式都使用start
^
和end
$
,因此

/^[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})*

编辑

正如@RobG在下面指出的,如果您想处理像
0000.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

如果这必须是字符串的一部分,则在正则表达式周围放置一个字边界,而不是开始和结束符号

/\b\d{1,3}(,\d{1,3})*(\.\d+)?\b/.test( "asd 0,000.123 sad" ); //true
^
$
替换为
\b

编辑3

使用这种方法

var input=“买房1.234.532.727,94”;
var matches=input.split(“”).filter(函数(项){return item.match(/(\d{1,3}(,\d{1,3})*(\.\d+))/g)});

console.log(匹配项)用于此目的的最佳正则表达式是

(?:^|\s)(\d{1,3}(?:,\d{3})*(?:\.\d+)?)(?!\S)

(?:^ |\s)
匹配数字前的字符串开头或空格,并且
(?!\s)
在不使用数字的情况下检查数字后的空格或字符串结尾

JS演示:

var rx=/(?:^\s)(\d{1,3}(?:,\d{3})*(?:\.\d+)?\s)/g;
var str=“购买跑车1000000.25 1.000.000,25 2000000.25 3000000.25测试2.45和拒绝测试2.45”;
var res=[],m;
while(m=rx.exec(str)){
res.push(m[1]);
}

控制台日志(res)用于此目的的最佳正则表达式是

(?:^|\s)(\d{1,3}(?:,\d{3})*(?:\.\d+)?)(?!\S)

(?:^ |\s)
匹配数字前的字符串开头或空格,并且
(?!\s)
在不使用数字的情况下检查数字后的空格或字符串结尾

JS演示:

var rx=/(?:^\s)(\d{1,3}(?:,\d{3})*(?:\.\d+)?\s)/g;
var str=“购买跑车1000000.25 1.000.000,25 2000000.25 3000000.25测试2.45和拒绝测试2.45”;
var res=[],m;
while(m=rx.exec(str)){
res.push(m[1]);
}

控制台日志(res)
^[1-9]\d{0,2}
应该是
^\d{1,3}
否则像0.123这样的数字由于前导零而失败。还有,如何理解0000.123?@gurvinder372谢谢!我刚刚更新了我的问题。如果我想匹配这个呢