代码之家  ›  专栏  ›  技术社区  ›  Rohit Khatri

正则表达式不返回javascript中的所有匹配项[重复]

  •  1
  • Rohit Khatri  · 技术社区  · 6 年前

    我试图在一个字符串中找到所有符合如下特定模式的匹配项 {{any thing here}} ,但我无法正确提取所有匹配项。不知道我做错了什么。下面是我到目前为止尝试过的代码。

    const string = `You have been identified in <span class="alert underline">{{db.count}}</span> breaches with <span class="alert underline">{{db.data_types}}</span> unique data types.`;
    

    我尝试过以下方法:

    const matches = /{{(.*?)}}/igm.exec(value);
    console.log(matches);
    

    输出:

    {
        0: "{{db.count}}",
        1: "db.count",
        index: 58,
        input: "You have been identified in <span class="alert und…line">{{db.data_types}}</span> unique data types.",
        groups: undefined
    }
    

    方法2

    const matches = RegExp('{{(.*?)}}', 'igm').exec(value);
    console.log(matches);
    

    {
    0:“{{db.count}”,
    索引:58,
    输入:“您已在<span class=“alert undline”>{db.data\u types}</span>唯一数据类型中识别。”,
    组:未定义
    

    方法3

    const matches = value.match(/{{(.*?)}}/igm);
    console.log(matches);
    

    [
        "{{db.count}}",
        "{{db.data_types}}"
    ]
    

    预期产量:

    [
        'db.count',
        'db.data_types'
    ]
    

    如果有人遇到同样的问题,请帮忙。 提前谢谢。

    3 回复  |  直到 6 年前
        1
  •  2
  •   user10243107 user10243107    6 年前

    如果要查找所有匹配项,则必须在循环中使用exec()。

    const string = `You have been identified in <span class="alert underline">{{db.count}}</span> breaches with <span class="alert underline">{{db.data_types}}</span> unique data types.`;
    
    let regEx = /{{(.*?)}}/igm;
    let result;
    
    while ((result = regEx.exec(string)) !== null) {
        console.log(result[1]);
    }
        2
  •  0
  •   Meir    6 年前

    分组不能很好地使用/g(全局)标志, See here

        3
  •  0
  •   Tim Klein    6 年前

    你的方法3看起来不错。我会尝试这个正则表达式,以不匹配花括号:

    [^{}]+(?=}})