JavaScript 元字符的应用

🌙
手机阅读
本文目录结构

元字符的应用

[]整括号的注意

  • 1、在整括号中出现的所有的字符都是代表本身意思的字符(没有特殊的含义,\d这种特殊)

      var reg = /^[.]\d+$/;
      console.log(reg.test("46545"));//->false
      console.log(reg.test(".89"));//->true
    
      var reg1 = /^[.]\d+[+]$/;
      console.log(reg1.test("46545"));//->false
      console.log(reg1.test(".89+"));//->true
    
      var reg2 = /^[.]\d+0[\d+]$/;
      console.log(reg2.test("46545"));//->false
      console.log(reg2.test(".465045"));//->true 如果是465045就是false
      console.log(reg2.test(".890+"));//->true
    
  • 2、整括号中不识别两位数,整括号内是多个取一个

      var reg1 = /^[12]$/;//->1或者2中的一个
      console.log(reg1.test("12"));//false
      console.log(reg1.test("1"));//true
      console.log(reg1.test("2"));//true
    
      var reg2 = /^[12-48]$/;//->1、2-6中的一个、8 三个中的一个
      console.log(reg2.test("128"));//false
      console.log(reg2.test("138"));//false
      console.log(reg2.test("158"));//false
      console.log(reg2.test("1"));//true
      console.log(reg2.test("3"));//true
      console.log(reg2.test("5"));//true
      console.log(reg2.test("8"));//true
      console.log(reg2.test("13"));//false
    
      var reg = /^[\w-]$/;//->数字、字母、下划线、- 中的一个
      console.log(reg.test("-"));//true
      console.log(reg.test("89"));//false
      console.log(reg.test("_"));//true
    

()整括号的另外作用:改变x|y的默认的优先级;

|的优先级很高;

功能:替换,“或"操作字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food”。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。

	var reg1 = /^18|19$/;
	//错误分析:想匹配119和189,1开始,9结尾,中间是8或者1的任意一个;
	//实际可以这些数字都是可以匹配成功的:18、19、181、189、119、819、1819...
	console.log(reg1.test("19"));//true
	console.log(reg1.test("18"));//true
	console.log(reg1.test("119"));//true
	console.log(reg1.test("189"));//true
	console.log("test 189999999999",reg1.test("189999999999"));//true
	console.log("test 819",reg1.test("819"));//true
	console.log("test 1819",reg1.test("1819"));//true
	console.log("test 1889899819",reg1.test("1889899819 "));//true
	
	//正确分析:18|19 可以匹配18开头或者19结尾的;(18开头)、(19结尾)、(18开头和19几位的),都可以匹配成功;
	
	
	//|替换,"或"操作字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。
	
	var testReg1=/m|food/;
	//匹配(m开头)、(food结尾)、(m开头或者food结尾);这三种都可以匹配
	console.log("test m",testReg1.test("m"));//true
	console.log("test m464545646565",testReg1.test("m464545646565"));//true
	console.log("test mood",testReg1.test("mood"));//true
	console.log("test food",testReg1.test("food"));//true
	var testReg2=/(m|f)ood/;
	//匹配mood/food
	console.log("test m",testReg2.test("m"));//false
	console.log("test m464545646565",testReg2.test("m464545646565"));//false
	console.log("test mood",testReg2.test("mood"));//true
	console.log("test food",testReg2.test("food"));//true
	
	var reg2 = /^(18|19)$/;
	//18、19
	console.log(reg2.test("19"));//true
	console.log(reg2.test("18"));//true
	console.log(reg2.test("119"));//false
	console.log(reg2.test("189"));//false
	
	var reg3 = /^1[8|1]9$/;
	//119、189
	console.log("test 19",reg3.test("19"));//false
	console.log(reg3.test("18"));//false
	console.log(reg3.test("119"));//true
	console.log(reg3.test("189"));//true

正则实践

  • 1、有效数字的正则(可以是 正数、负数、零、小数 )

    • 1)、".“可以出现也可以不出现,但是一旦出现,后面必须跟着一位或者多位数字

    • 2)、最开始可以有+/- 也可以没有

    • 3)、整数部分,一位数可以是0-9之间的一个,多位数不能以0开头

        var reg = /^[+-]?(\d|([1-9]\d+))(\.\d+)?$/;//.是一个元字符,所以需要转义;
        console.log("test +1",reg.test("+1"));//true
        console.log("test +-1",reg.test("+-1"));//false
        console.log("test -1.001",reg.test("-1.001"));//true
        console.log("test -1.001.002",reg.test("-1.001.002"));//false
        console.log("test 0",reg.test("0"));//true
      
  • 2、年龄介于18~65之间

    • 18~65可以分为三份;18-19 20-59 60-65

    • 因为1开头的不能是12,15,14这些;

    • 6开头的不能是66,68这些;

    • 2和5开头,后面可以随便,0-9都可以;

        var reg = /^(1[8-9]|[2-5]\d|6[0-5])$/;
        console.log("test 18",reg.test("18"));//true
        console.log("test 12",reg.test("12"));//false
        console.log("test 20",reg.test("20"));//true
        console.log("test 65",reg.test("65"));//true
        console.log("test 69",reg.test("69"));//false
      
  • 3、验证邮箱的正则(简版)

    • 左边:数字、字母、下环线、.、-

        var reg = /^[\w.-]+@[0-9a-zA-Z]+(\.[a-zA-Z]{2,4}){1,2}$/;
        /*
        * \w:数字、字母、下划线中的任意一个字符  [0-9a-zA-Z_]
        * [\w.-]:[\w]、[.]、[-]三者中的任意一个,出现一次或者多次;
        * [0-9a-zA-Z]:大小写,或者数字;
        * (\.[a-zA-Z]{2,4})  .后面加2-4位大小写的域名,比如.com .cn
        * {1,2} 出现一次或者两次。可能是顶级域名,也可能是二级域名;
        * */
        console.log(reg.test("weqwes@sina.com.cn"));//true
      
  • 4、汉字昵称 2-4位汉字

      	var reg = /^[\u4e00-\u9fa5]{2,4}$/;
    
  • 5、身份证号码

      var reg1 = /^\d{17}(\d|X|x)$/;
    
      //342224199004281111X
      var reg2 = /^(\d{2})(\d{4})(\d{4})(\d{2})(\d{2})(\d{2})(\d)(\d|X|x)$/;
    
      console.log("test 34222819000428111x",reg1.test("34222819000428111x"));//true
      console.log("test 34222819000428111X",reg1.test("34222819000428111X"));//true
      console.log("test 34222819000428111x",reg2.test("34222819000428111x"));//true
      console.log("test 34222819000428111X",reg2.exec("34222819000428111X"));//["34222819000428111X", "34", "2228", "1900", "04", "28", "11", "1", "X", index: 0, input: "34222819000428111X"]
    
  • 6.匹配整数或者0-8位小数;

    const test0 = “01”;//true const test1 = “1.”;//true const test2 = “5”;//true const test3 = “999999999.34546782”;//true const test4 = “5.10”;//true

    const test5 = “123.45678.908”;//false const test6 = “1s34.5678”;//false const test7 = “1s34.3454678332”;//false const test8 = “123.45678.”;//false

代码如下

const reg=/^\d{1,}\.?\d{0,8}$/;

const test0 = "01";//true
const test1 = "1.";//true
const test2 = "5";//true
const test3 = "999999999.34546782";//true
const test4 = "5.10";//true

const test5 = "123.45678.908";//false
const test6 = "1s34.5678";//false
const test7 = "1s34.3454678332";//false
const test8 = "123.45678.";//false

console.log(reg.test(test0));
console.log(reg.test(test1));
console.log(reg.test(test2));
console.log(reg.test(test3));
console.log(reg.test(test4));
console.log("----");
console.log(reg.test(test5));
console.log(reg.test(test6));
console.log(reg.test(test7));
console.log(reg.test(test8));

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了