代码之家  ›  专栏  ›  技术社区  ›  Rich Bradshaw

javascript文本操作

  •  1
  • Rich Bradshaw  · 技术社区  · 15 年前

    刚开始使用JS,就决定将friendfeed转换为fluid应用程序,作为其中的一部分,我需要能够从字符串中解析一些数字。

    如何完成此功能?

    function numMessages(text) {
    
        MAGIC HAPPENS (POSSIBLY THE DARK ART OF THE REGEX)
    
        return number;
    }
    

    输入为“直接消息(15)”。

    输出为15。

    直觉告诉我找到第一个括号,然后找到最后一个括号,把文本放在中间,但我不知道怎么做。第二直觉告诉我要为[0-9]使用regex,但我不知道如何在JS中运行regex。如果需要,jquery已经可用。

    谢谢!

    3 回复  |  直到 15 年前
        1
  •  3
  •   Paolo Bergantino    15 年前

    应该这样做:

    >>> 'Direct Messages (15)'.match(/[0-9]+/g);
    ["15"]
    

    如果字符串中的数字超过1,请小心:

    >>> 'Direct 19 Messages (15)'.match(/[0-9]+/g);
    ["19", "15"]
    

    如果你只想要第一场比赛,你可以去掉 g 旗帜:

    >>> 'Direct 19 Messages (15)'.match(/[0-9]+/);
    ["19"]
    

    如果你只想匹配括号之间的内容

    >>> 'Direct 19 Messages (15)'.match(/\((.*?)\)/);
    ["(15)","15"] 
    // first index will always be entire match, 2nd index will be captured match
    

    正如评论中指出的,要获得最后一个匹配:

    >>> var matches = 'Direct 19 Messages (15)'.match(/[0-9]+/g);
    >>> matches[matches.length-1];
    "15"
    

    尽管一些边界检查也是合适的。:)

        2
  •  0
  •   Daniel Moura    15 年前
    var reg = new RegExp('[0-9]+');
    reg.exec('Direct Messages (15)');
    
        3
  •  0
  •   Daniel Vandersluis    15 年前
    function numMessages(text) {
      return text.match(/\d+/g);
    }
    

    这将返回所有数字( \d 是一个特殊字符类,等价于 [0-9] )从字符串开始。这个 /g 使regex引擎 全球的 搜索,从而返回所有匹配的数组;如果只需要一个,请删除 g . 不管您的表达式是否是全局的, match 返回一个数组,因此需要使用数组表示法来获取所需的元素。

    请注意,正则表达式匹配的结果属于字符串类型;如果需要数字,可以使用 parseInt 将“15”转换为15。

    如果你只想要一个数字,把它们放在一起,就像你最初的问题文本中显示的那样:

    function numMessages(text) {
      return parseInt(text.match(/\d+/)[0]);
    }
    
    str = "Direct Messages (15)";
    numMessages(str); // 15