Javascript-Expression

正则表达式

1)简介:是一个描述字符模式的对象

2)创建:

  >构造函数
    var pattern =new RegExp("正则表达式","修饰符")
  >正则表达式字面量
    var pattern = /正则表达式/修饰符;
ps:
  1-修饰符:
          	g	global		全局
            i	ignore case	不区分大小写
            m	multiline	多行
  2-case
      1)以数字开始的换行字符串  (修饰符有无m(多行)的区别:)
          var str = 'hello\n1wq\n2asd';
          var pattern = /^\d/img;
          var res = str.match(pattern);
          console.log(str);
          console.log(res); //[ '1', '2' ]
            修饰符有无m(多行)的区别:
          var str1 = 'hello\n1wq\n2asd';
          var pattern1 = /^\d/ig;
          var res1 = str1.match(pattern1);
          console.log(str1);
          console.log(res1); //null
      2)关于g修饰符对于lastIndex属性的影响
        var str3 = 'hello js hello world';
        var pattern  = /hello/img;
        console.log(pattern.exec(str3));//因为有g修饰符下次检测的时候从五号位置开始
        console.log(pattern.lastIndex);

        console.log(pattern.exec(str3));//下次检测的时候从五号位置开始
        console.log(pattern.lastIndex);
        // 输出:
          // [ 'hello', index: 0, input: 'hello js hello world', groups: undefined ]
          // 5
          // [ 'hello', index: 9, input: 'hello js hello world', groups: undefined ]
          // 14

        结论:如果正则表达式中加了g修饰符,表示每次检测完之后,都会维护lastIndex属性
            如果不加g,则不会维护lastIndex属性,每次检查都从字符串的最左侧开始.

2)字符类

  . 	(点号,小数点) 匹配任意单个字符,但是行结束符除外
  \d 	匹配任意阿拉伯数字。等价于[0-9]
  \D 	匹配任意一个不是阿拉伯数字的字符。等价于[^0-9]。
  \w 	匹配任意来自基本拉丁字母表中的字母数字字符,还包括下划线。等价于 [A-Za-z0-9_]。
  \W	匹配任意不是基本拉丁字母表中单词(字母数字下划线)字符的字符。等价于 [^A-Za-z0-9_]。
  \s 	匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格。
  \S 	匹配一个非空白符。
  \t 	匹配一个水平制表符(tab)
  \r 	匹配一个回车符(carriage return)
  \n 	匹配一个换行符(linefeed)
  \v 	匹配一个垂直制表符(vertical tab)
  \f 	匹配一个换页符(form-feed)
  [xyz]	 一个字符集合,也叫字符组。匹配集合中的任意一个字符。你可以使用连字符‘-’指定一个范围。[0-9]   [a-z]
  [^xyz] 一个反义或补充字符集,也叫反义字符组。也就是说,它匹配任意不在括号内的字符。你也可以通过使用连字符 '-' 指定一个范围内的字符。
  ^	匹配输入开始。如果多行(multiline)标志被设为 true,该字符也会匹配一个断行(line break)符后的开始处。
  $ 	匹配输入结尾。如果多行(multiline)标志被设为 true,该字符也会匹配一个断行(line break)符的前的结尾处。
  \b  	匹配一个零宽单词边界(zero-width word boundary),如一个字母与一个空格之间。
  \B 	匹配一个零宽非单词边界(zero-width non-word boundary),如两个字母之间或两个空格之间。
  (x)	匹配 x 并且捕获匹配项。 这被称为捕获括号(capturing parentheses)。
  \n	n 是一个正整数。一个反向引用(back reference),指向正则表达式中第 n 个括号(从左开始数)中匹配的子字符串。
  数量词
  x* 	匹配前面的模式 x 0 或多次。
  x+ 	匹配前面的模式 x 1 或多次。等价于 {1,}。
  x? 	匹配前面的模式 x 0 或 1 次。
  x{n} 	n 是一个正整数。前面的模式 x 连续出现 n 次时匹配
  x{n,} 	n 是一个正整数。前面的模式 x 连续出现至少 n 次时匹配。
  x{n,m} n 和 m 为正整数。前面的模式 x 连续出现至少 n 次,至多 m 次时匹配。
  x*? 	像上面的 * 一样匹配前面的模式 x,然而匹配是最小可能匹配。
  x+? 	像上面的 + 一样匹配前面的模式 x,然而匹配是最小可能匹配。
  x|y 	匹配 x 或 y

	例如:/\w+:\/\/\w+(\.)\w+\1\w+/
                    http://www.baidu.com	

3)属性

  RegExp.prototype.global   布尔值,表明这个正则表达式是否带有修饰符g
  RegExp.prototype.ignoreCase 布尔值,表明这个正则表达式是否带有修饰符i
  RegExp.prototype.multiline  布尔值,表明这个正则表达式是否带有修饰符m
  RegExp.prototype.lastIndex   如果匹配模式带有g,这个属性存储在整个字符串中下一次检索的开始位置,这个属性会被exec(), test()方法调用到
  RegExp.prototype.source  正则表达式的字符串形式
  RegExp.prototype.flags  修饰符的字符串形式
  >
    var pattern3 = /wo/img;
    console.log(pattern3.source);//wo
    console.log(pattern3.global);//true

4)方法

  RegExp.prototype.test(str)
    >检测字符串str中是否存在满足条件的字符
    >返回值:true\false
    >参数:需要检测的字符串
  RegExp.prototype.exec(str)
    >检测字符串中的正则表达式的匹配
    >参数:字符串
    >返回值: 满足条件的字符组成的数组\null
      >
        var str2 = "hello regexp";
        var pattern4 = /he/img;
        console.log(pattern4.exec(str2));//[ 'he', index: 0, input: 'hello regexp', groups: undefined ]

    >关于g修饰符对于lastIndex属性的影响
      : var str3 = 'hello js hello world';
        var pattern  = /hello/img;
        console.log(pattern.exec(str3));//因为有g修饰符下次检测的时候从五号位置开始
        console.log(pattern.lastIndex);

        console.log(pattern.exec(str3));//下次检测的时候从五号位置开始
        console.log(pattern.lastIndex);
        // 输出:
          // [ 'hello', index: 0, input: 'hello js hello world', groups: undefined ]
          // 5
          // [ 'hello', index: 9, input: 'hello js hello world', groups: undefined ]
          // 14

      结论:如果正则表达式中加了g修饰符,表示每次检测完之后,都会维护lastIndex属性
           如果不加g,则不会维护lastIndex属性,每次检查都从字符串的最左侧开始.

      题目: 找出字符串中所有满足条件的字符串,并以数组形式返回
          >
            var str = 'hello js hello world';
            var pattern = /hello/img;
            var res;
            var arr=[];
            while(res = pattern.exec(str)){
              arr.push(res);
            }
            console.log(arr);//[ 'hello', 'hello' ](有g)
          > var str = 'hello js hello world';
            var pattern = /hello/img;
            console.log(str.match(pattern));//[ 'hello', 'hello' ]
  RegExp.prototype.toString()

5)正则表达式小case

  1)以数字开始的换行字符串  (修饰符有无m(多行)的区别:)
      var str = 'hello\n1wq\n2asd';
      var pattern = /^\d/img;
      var res = str.match(pattern);
      console.log(str);
      console.log(res); //[ '1', '2' ]
        修饰符有无m(多行)的区别:
      var str1 = 'hello\n1wq\n2asd';
      var pattern1 = /^\d/ig;
      var res1 = str1.match(pattern1);
      console.log(str1);
      console.log(res1); //null

2)匹配三个连续的数字
var str = ‘123.123q’;
var pattern = /\d\d\d/ig;
console.log(str.match(pattern));//[ ‘123’, ‘123’ ]

3)匹配日期
var str = ‘2021/23/2’;
var pattern = /\d\d\d\d/\d\d/\d/ig;
//两者等价
// var pattern = /\d{4}/\d{2}/\d/ig;
console.log(str.match(pattern));//[ ‘2021/23/2’ ]

 4)匹配手机号
  var num = 12345678352259;
  var pattern = /^1\d{10}/img;
  console.log(pattern.test(num));//是否满足11位数字 true

  var num = 1234567835;
  var pattern = /^1\d{10}$/img;//加上$严格控制位数
  console.log(pattern.test(num));//是否满足11位数字 false
  
 5)验证手机号---[可以用于表单验证]
      11位,以数字1开头,第二位3,4,5,6,7,8,9
      var num = 1235637462;
      var pattern=/^1[3,4,5,6,7,8,9]\d{9}$/img;
      //或者var pattern = /^1[3~9]\d{9}$/img;
      console.log(pattern.test(num));

6)日期对象

  Data() 
  var str = new Date();
  console.log(str);//此时输出的是标准时间(中国比标准时间快8小时)//对时间进行转换---moment.js第三方库函
//如何导入moment.js库
//在html中导入该库(在bootCDN)
在http://momentjs.cn/docs/#/parsing/
  >解析
    moment();
  >显示
    moment(str).format('YYYY MM DD hh:mm:ss');//参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值