JavaScript 正则表达式、Math、Date

188 阅读5分钟

1.正则表达式

  • 定义:定义字符中字符出现规则的表达式
  • 何时使用:切割、替换、 *验证
  • 语法:/正则表达式/ 1.最简单的正则:关键字原文:"no" 正则语法:/no/ig
  • i:忽略大小写
  • g:全部

2.备选字符集:一个备选字符集:规定了一位字符可用的备选字符列表 语法:/[备选字符列表]/ 强调:

  1. 一个中括号只能匹配一个字符
  2. 正则默认只要满足后,就不再管理后续操作,后续用户可以随意输入

解决:只要是做验证 必须/^[备选字符集]$/

前加^后加$从头到尾完全匹配

特殊: 1.备选字符集中,Unicode号是连续的那么中间部分可以用—

  • 例如:一位数字:[0-9] 一位汉字[\u4e00-\u9fa5] 2.除了xxx外,其他都可以:[^xxx] 3.预定义字符集:
  • 一位数字:\d ——>[0-9]
  • 一位数字、字母、下划线:\w ——>[0-9A-Za-z_ ]
  • 一位空白字符:\s —>空格、制表符\t、换行符\n
  • 一位除了换行外的任意字符: . 4.量词:规定了一个字符集出现的次数
  1. 有明确的数量:
  • 字符集{n,m}:前面相邻的字符集最少出现n次,最多出现m次
  • 字符集{n,}:前面相邻的字符集,最少出现n次,最多不限
  • 字符集{n}:前面相邻的字符集,必须出现n次
  1. 没有明确数量: 字符集 ?:前面相邻的字符集,可有可无,最多一次 *:...............可有可无,多了不限 +:...............至少一次,多了不限

5、选择和分组

  •   选择:规则1|规则2 - 可以再多个规则中选择满足的规则进行执行
    
  •   分组:添加子规则:(规则1|规则2)
    

2、字符串中支持正则表达式的API:分割、替换:

  1. 分割字符串: var arr=str.split(reg);

  2. *****替换字符串:

    1. 基本替换法: var newStr=str.replace(reg,"新内容"); 特殊:1、默认只会替换第一个关键字,想要替换所有记得加上后缀g 2、替换的内容只能是一个固定的新内容
    1. 高级替换法
var newStr=str.replace(/[我卧窝][槽操艹草去]+/g,function(a,b,c){
				console.log(a);//正则匹配到的关键字
				console.log(b);//正则匹配到的关键字的下标
				console.log(c);//原文本身
				return a.length==2?"**":"***";
			});
    1. 格式化:如果替换API使用正则时,并且里面带有分组,那么你会得到更多的形参
var newStr=str.replace(reg,function(a,b,c...){
				console.log(a);//正则匹配到的关键字
				console.log(b);//第一个分组获取到的内容
				console.log(c);//第二个分组获取到的内容
				return "格式化的东西"
			});
  1. 正则对象: 创建正则对象:2个
  • 直接量:var reg=/正则表达式/后缀
  • 构造函数:var reg=new RegExp("正则表达式","后缀") 方法:var bool=reg.test(user);
  • 布尔值如果是true,说明用户输入的符合我们的要求,false说明不通过

1、Math:专门提供了数学计算的API

  • 唯一的属性:Math.PI API:
  1. 取整:3种
  • 上取整:只要超过一点点,就会取下一个整数,此方法小数位数不能超过15位否则会失效:Math.ceil(num);
  • 下取整:不管超过多少,都会省略掉小数部分,此方法小数位数不能超过15位否则会失效:Math.floor(num);
  • 四舍五入取整:Math.round(num);
  • **parseFloat(num.toFixed(d));//既有四舍五入功能,又具有保留自定义小数位数的操作,结果是一个字符串
笔试题:封装一个函数,实现可以自定义保留小数位数并且四舍五入的功能,但是不允许使用toFixed?
                function round(num,d){
				num*=Math.pow(10,d);
				num=Math.round(num)
				num/=Math.pow(10,d);
				return num.toString();
			}

  1. 乘方和开方
  • *乘方:Math.pow(底数,幂); - 简化连续的乘法
  • 开方:Math.sqrt(num); - 只能开平方
  1. 最大值和最小值
  • 语法:Math.max/min(a,b,c,d,e,f....);
  1. 绝对值:将负数转为整数
  • Math.abs(num);
  1. *随机数:只要页面上具有随机的功能,底层一定用到了随机数
  • Math.random() 已经是一个随机数了,随机的小数0-1,有可能取到0,但是绝对不可能取到1 - 意味 着能取到最小值,但是取不到最大值
  • 公式:parseInt(Math.random()*(max-min+1)+min);

2、Date:封装了一个日期对象,提供了对日期事件进行操作的API

何时使用:网页上跟事件日期相关的

  • 1、创建日期对象:4种

     1、*创建当前时间:
      	var now=new Date();
    
    2、*创建自定义时间:
      	var birth=new Date("yyyy/MM/dd hh:mm:ss");
    
    3、创建自定义时间:
      	var birth=new Date(yyyy,MM,dd,hh,mm,ss);
      	缺点:月份需要修正:计算机中月份是从0开始到11的
    
    4、复制一个日期对象:
      	为什么:日期对象的API都是直接修改原日期对象,使用API后,无法同时保存住旧的日期对象
      	何时使用:在调用日期对象的API之前都要先复制,在使用API
      	语法:var end=new Date(now);
    
    5、var xxx=new Date(毫秒数);
      	计算器其实保存的就是从1970年1月1日至今的毫秒数
                      
    
  • 2.操作:

    1、两个日期对象之间可以相减,得到毫秒差,换算出你想要的任何一部分,看出细节:其实日期对象保存的就是一个毫秒数
    2、API:
      分量:时间单位
      	FullYear Month Date Day
      	Hours Minutes Seconds
         1、每一个分量都有一对儿方法:getXXX()/setXXX()
      	特殊:1、取值范围:
      		 年:当前年份
      		 月:0-11
      		 日:1-31
      		 时:0-23
      		 分:0-59
      		 星期:0-60代表星期天
    
      	      2、星期只有get,没有set
      
     2、固定套路:对着某个日期直接做加减				
      	date.setXXX(date.getXXX()+3)
    
    
    3、格式化为字符串:
    国际化日期格式化为本地化日期:date.toLocaleString(); 
        1、具有浏览器的兼容性问题 2、则不可以再使用日期对象的API,也不会再带有进制操作了
       好处:转为了字符串可用字符串的API
      	解决:自定义format格式化