zoukankan      html  css  js  c++  java
  • javascript正则表达式的test奇怪问题

    有一段验证是否是yyyy/MM日期类型的正则表达式如下:
    var regexp = /^(19|2\d)\d{2}\/(0[1-9]|1[012])$/g;
    var val = "2009/12";
    alert(regexp.test(val));
    alert(regexp.test(val));
    但是两次alert出来的结果却不相同,分别是ture和false。很不理解,然后查了一些资料发现原因如下。
    如果模式有全局选项,每次test都会保留上次匹配位置,即lastIndex。

    对应的解决方案有两种:
    1.每次完成匹配之后重置lastIndex属性。
    2.去掉正则表达式后面的g。

    即如下:
    var regexp = /^(19|2\d)\d{2}\/(0[1-9]|1[012])$/g;
    var val = "2009/12";
    alert(regexp.test(val));
    regexp.lastIndex = 0;
    alert(regexp.test(val));

    var regexp = /^(19|2\d)\d{2}\/(0[1-9]|1[012])$/;
    var val = "2009/12";
    alert(regexp.test(val));
    alert(regexp.test(val));
  • 相关阅读:
    package.json 笔记
    TypeScript 笔记
    RxJS 笔记
    angular 使用Redux
    ngrx 笔记
    Node 的使用
    imoocLinux环境变量配置文件笔记
    imooc正则表达式学习笔记
    js定时器和linux命令locate
    linux修改PATH环境
  • 原文地址:https://www.cnblogs.com/fogwang/p/2666587.html
Copyright © 2011-2022 走看看