从组正则表达式中移除逗号

5

能否从这个中获取以下3组信息:

  1. 美国
  2. 专利
  3. 6570557(不带逗号)

目前我已经得到:

(US)(\s{1}Patent\s{1})(\d{1},\d{3},\d{3})

我试图去掉逗号,但是如果使用(?!,)就会导致整个数字被删除。


为什么不直接获取带逗号的数字,需要时再去掉逗号呢?/(US)(\sPatent\s)([\d,]*)/ 懒惰胜利! - kojiro
我忘记说我不能更改JS,我只想用正则表达式实现这个目标。 - ricardoespsanto
正则表达式不在JS中吗? - kojiro
好吧,不是通过 JavaScript 内部机制检索的,而是通过外部配置机制检索的。 - ricardoespsanto
4个回答

10

尝试使用:

var input   = 'US Patent 6,570,557',
    matches = input.match(/^(\w+) (\w+) ([\d,]+)/),

    code = matches[1],
    name = matches[2],
    numb = matches[3].replace(/,/g,'');

你好,赞一个干净简洁的代码。最近我一直注意到你在正则表达式标签下的出色工作,看起来你在那里工作已经有很长时间了。 :) - zx81

2

不需要使用正则表达式,你可以通过两个简单的函数来实现:

var str = "US Patent 6,570,557"; // Your input
var array = str.split(" "); // Separating each word
array[2] = array[2].replace(",", ""); // Removing commas
return array; // The output

这也应该会更快。


1

当匹配数字时,你不能忽略逗号,除非你将数字作为三个单独部分进行匹配,然后再将它们拼接在一起。

最好使用 String.replace 从匹配结果中去掉定界符。


0

只需添加更多的组,如下所示:

(US)(\s{1}Patent\s{1})(\d{1}),(\d{3}),(\d{3})

然后将最后3组连接起来


当然,OP不确定专利号是否在“1,000,000”和“9,999,999”之间。 - Marcel Korpel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接