【问题标题】:JavaScript: extract all occurrences of a regular expression in a stringJavaScript:提取字符串中所有出现的正则表达式
【发布时间】:2016-03-13 12:20:56
【问题描述】:

我有一个 Python 函数,它从包含数字簇的字符串中生成整数列表:

def str_strip_numbers(s):
    """
    Returns a vector of integer numbers
    embedded in a string argument
    """
    return [int(x) for x in re.compile('\d+').findall(s)]

假设an1kb12s336z,它返回[1,12,336]

在 JavaScript 中获得相同效果的最佳方法是什么?我摆弄了一些正则表达式,但没有得到太多。这不是我所希望的:

> var nn = /\d+/g
undefined
> nn
/\d+/g
> 'aba12gg4a'.search(nn)
3

看起来我得到了位数。

【问题讨论】:

  • 你不能只拆分任何不是数字的东西,比如"an1kb12s336z".split(/\D+/)
  • 你可以使用this code demo
  • 您是否在 Google 上搜索过您提议的帖子的标题?只要这样做,你就会找到很多答案。

标签: javascript python regex string


【解决方案1】:
strStripNumbers: function(str) {
  return str.match(/\d+/g).map(__.parseInt);
}

__ 表示lodash

【讨论】:

  • 做得好正确答案。如果你是像我这样的 JavaScript 用户,你也可以这样做const re = RegExp(/\d+/g)
【解决方案2】:

你可以试试这个。它将从字符串中删除任何字母,并拆分为数字上的数组。然后过滤掉任何不使用 parseInt 解析的值,即字符。

 'aba12gg4a'.split(/[^0-9]+/).reduce(function( ret, elem ){
        if (! isNaN(elem = parseInt(elem))){
            ret.push( elem );
        }
        return ret;
    }, []);

【讨论】:

  • 这会返回一个字符串数组。
  • 使用我在评论中的代码。匹配比拆分好,更接近 Python 中的 OP。
【解决方案3】:

搜索不是您正在寻找的功能。 String.prototype.search() 返回第一个匹配结果的位置

您应该改用 String.prototype.match:'aba12gg4a'.match(/\d+/g)。这将返回在源字符串中找到的所有匹配项的数组。

【讨论】:

  • 这不会返回一个数字数组,而是一个字符串数组。
  • 我将他问题的实质解释为他返回的值不是他期望的匹配集,而不是对象的类型错误。如果他想要它们作为数字,他总是可以matches.map(function(val) { return parseInt(val) }),这几乎与他在原始 python 代码中所做的直接等效。
  • 非常感谢你,''mwobey''!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 2018-06-20
相关资源
最近更新 更多