【问题标题】:Find all groups of 9 [duplicate]查找所有 9 个组 [重复]
【发布时间】:2016-12-16 08:16:20
【问题描述】:

我正在学习 JS 正则表达式,所以我正在考虑这个示例字符串 99s999s99s99。 现在我想在这个字符串中找到所有的数字序列。我尝试了以下方法:

var s = /(\d+)/g;
var a = '99s999s99s99';
s.exec(a);

var s = /(\d+)/;
var a = '99s999s99s99';
s.exec(a);

但两者都产生以下输出: [ '99', '99', index: 0, input: '99s999s99s99' ]

如何找到9s的所有组?

【问题讨论】:

  • 您是否提供了g(全局)标志?
  • 使用全局标志/\d+/g
  • g 的答案也是一样的。

标签: javascript regex


【解决方案1】:

您的正则表达式很好(尽管它会匹配其他数字,而不是像您的标题所暗示的那样仅匹配 9),但是当您需要 String.prototype.match 时,您正在使用 RegExp.prototype.exec

'99s999s99s99'.match( /(\d+)/g ) 返回数组:

["99", "999", "99", "99"]

RegExp.prototype.exec 必须是called repeatedly 使用相同的正则表达式查找所有匹配项,否则只能找到一个。

【讨论】:

  • 我使用了 JS: The Good Parts 中规定的 'exec()' 方法。
  • @RajatSaxena 它们都是可以使用的有效函数,但它们具有不同的行为。您可以根据我的答案中的最后一个链接将 exec 与循环一起使用,但我相信 match 会更适合您。
【解决方案2】:

查看以下代码和演示链接:

代码:

var str = "99s999s99s99";
var pattern = /\d+/g;
var result = str.match(pattern);
console.log(result);

执行:

var str = "99s999s99s99";
var pattern = /\d+/g;
var result = str.match(pattern);
console.log(result);

演示链接:JS BIN

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2020-10-21
    • 2018-02-12
    • 1970-01-01
    相关资源
    最近更新 更多