Javascript 正则表达式从字符串中提取数字和日期

Javascript 正则表达式从字符串中提取数字和日期,javascript,regex,Javascript,Regex,我试图从字符串中提取日期、百分比或数字。字符串可以是: 响应值10(我想从这里提取10) 响应值2014年12月10日(我想从这里摘录2014年12月10日) 响应值为2015年8月(我想从这里提取2015年8月) 我把正则表达式写成(?:\d{2}\/\d{4}\\d{2}(?:\/\d{2}\/\d{4})正则表达式满足了2014年12月12日、2012年2月10日的要求 我还试图修改相同的正则表达式,以获得10、08/2015和10/10/2015,但不知道如何获得 如何实现这一点?Mat

我试图从字符串中提取日期、百分比或数字。字符串可以是:

  • 响应值10(我想从这里提取10)
  • 响应值2014年12月10日(我想从这里摘录2014年12月10日)
  • 响应值为2015年8月(我想从这里提取2015年8月)
  • 我把正则表达式写成
    (?:\d{2}\/\d{4}\\d{2}(?:\/\d{2}\/\d{4})
    正则表达式满足了2014年12月12日、2012年2月10日的要求

    我还试图修改相同的正则表达式,以获得10、08/2015和10/10/2015,但不知道如何获得


    如何实现这一点?

    Match方法支持regExp,并将返回一个包含您要查找的项目的数组:

    var date=“12/12/2014”
    var arr=date.match(/(\d{2})[\/](\d{2})[\/](\d{4})/);
    console.log(arr[0]);
    控制台日志(arr[1]);
    控制台日志(arr[2]);
    
    控制台日志(arr[3])匹配方法支持regExp,并将返回一个包含您要查找的项目的数组:

    var date=“12/12/2014”
    var arr=date.match(/(\d{2})[\/](\d{2})[\/](\d{4})/);
    console.log(arr[0]);
    控制台日志(arr[1]);
    控制台日志(arr[2]);
    
    控制台日志(arr[3])要匹配示例数据,可以使用交替匹配2位/4位数字,或使用匹配2位和4位数字的可选部分匹配2位数字

    \b(?:\d{2}\/\d{4}|\d{2}(?:\/\d{2}\/\d{4})?)\b
    
    解释

    • \b
      单词边界,防止单词char成为较大单词的一部分
    • (?:
      非捕获组
      • \d{2}\/\d{4}
        匹配2位/4位
      • |
      • \d{2}
        匹配两位数字
      • (?:\/\d{2}\/\d{4})
        可选匹配/2位/4位
    • 关闭组
    • \b
      单词边界

    注意2和4位数字也可以匹配99和9999。如果你想让你的匹配更加具体,这个页面会很有帮助

    const pattern=/\b(?:\/\d{2}\/\d{4}\d{2}(?:\/\d{2}\/\d{4})?)\b/;
    [
    “响应值为10”,
    “响应值2014年12月10日”,
    “响应值2015年8月”
    
    ].forEach(s=>console.log(s.match(pattern)[0])要匹配示例数据,可以使用交替匹配2位/4位数字,或使用匹配2位和4位数字的可选部分匹配2位数字

    \b(?:\d{2}\/\d{4}|\d{2}(?:\/\d{2}\/\d{4})?)\b
    
    解释

    • \b
      单词边界,防止单词char成为较大单词的一部分
    • (?:
      非捕获组
      • \d{2}\/\d{4}
        匹配2位/4位
      • |
      • \d{2}
        匹配两位数字
      • (?:\/\d{2}\/\d{4})
        可选匹配/2位/4位
    • 关闭组
    • \b
      单词边界

    注意2和4位数字也可以匹配99和9999。如果你想让你的匹配更加具体,这个页面会很有帮助

    const pattern=/\b(?:\/\d{2}\/\d{4}\d{2}(?:\/\d{2}\/\d{4})?)\b/;
    [
    “响应值为10”,
    “响应值2014年12月10日”,
    “响应值2015年8月”
    ].forEach(s=>console.log(s.match(pattern)[0])只是为了好玩(regex很好玩)可供选择的答案:

    \b(?:(?:\d\d\/){1,2}\d{4}|\d\d)\b
    

    • \b
      -匹配单词边界
    • (?:
      -第一个非捕获组。
      • (?:
        -第二个非捕获组。
        • \d\d\/
          -匹配两个数字和一个文字正斜杠
        • ){1,2}
          -关闭第二个非捕获组并使用它一两次
      • \d{4}
        -匹配四位数字
      • |
        -替换(或)
      • \d\d)
        -两位数字并关闭第一个非捕获组
    • \b
      -匹配单词边界


    也许我们可以做到这一点,即使没有改变:

    \b\d\d(?:(?:\/\d\d){1,2}\d\d)?\b
    

    • \b
      -匹配单词边界
    • \d\d
      -匹配两位数字
    • (?:
      -第一个非捕获组。
      • (?:
        -第二个非捕获组。
        • \/\d\d
          -匹配一个文本斜杠和两个数字
        • ){1,2}
          -关闭第二个非捕获组并使用它一两次
      • \d\d
        -匹配两位数字
      • )?
        -关闭第一个非捕获组并将其设置为可选
    • \b
      -匹配单词边界

    只是为了好玩(regex很好玩)接受答案的另一种选择:

    \b(?:(?:\d\d\/){1,2}\d{4}|\d\d)\b
    

    • \b
      -匹配单词边界
    • (?:
      -第一个非捕获组。
      • (?:
        -第二个非捕获组。
        • \d\d\/
          -匹配两个数字和一个文字正斜杠
        • ){1,2}
          -关闭第二个非捕获组并使用它一两次
      • \d{4}
        -匹配四位数字
      • |
        -替换(或)
      • \d\d)
        -两位数字并关闭第一个非捕获组
    • \b
      -匹配单词边界


    也许我们可以做到这一点,即使没有改变:

    \b\d\d(?:(?:\/\d\d){1,2}\d\d)?\b
    

    • \b
      -匹配单词边界
    • \d\d
      -匹配两位数字
    • (?:
      -第一个非捕获组。
      • (?:
        -第二个非捕获组。
        • \/\d\d
          -匹配一个文本斜杠和两个数字
        • ){1,2}
          -关闭第二个非捕获组并使用它一两次
      • \d\d
        -匹配两位数字
      • )?
        -关闭第一个非捕获组并将其设置为可选
    • \b
      -匹配单词边界


    您能提供一个您想要匹配的值列表吗?您当前的正则表达式不符合matc