zoukankan      html  css  js  c++  java
  • JavaScript-8(正则表达式)

    一、正则表达式

    1.定义

    • 对字符串进行描述的

    2.作用

    • 表单验证
    • 验证 邮箱/电话/邮编 ....
    • WEB编辑器
    • 爬虫、数据抓取、小偷程序

    3. 定义正则表达式

    • 直接量
    • 函数
    • 构造函数

    二、 正则表达式基础

    1.原子

    • 正则表达式的最小组成单位
    • 普通的字母、数字、符号 都是原子
    • 转义字符
    • 字符类

    2.字符直接量(原子)

    • 原子的重要组成
    • 普通的字母、数字、符号
    • 换行
    • 制表
    • 回车
    • v垂直制表
    • f换页
    • \
    •  退格符
    • x00
    • u0000

    3.字符类(原子)

    • d 数字 [0-9]
    • D 除了数字之外的字符 [^0-9]
    • w 数字、字母、下划线 [0-9a-zA-Z_]
    • W 除了数字、字母、下划线 之外的字符 [^0-9a-zA-Z_]
    • s 空白符 [ v f ]
    • S 除了空白符之外的字母 [^ v f ]
    • . 除了换行外所有的字符 [^ ]
    • [...] [0-9]表示一个范围,只要有一个满足即可
    • [^...]除了...都匹配
    • [] 匹配退格符

    4.重复(对原子的数量修饰)

    • + 表示前面原子出现1次或多次 {1,}
    • ? 表示前面的原子出现0次或1次 {0,1}
    • * 表示前面的原子出现0次1次或多次 任意次 {0,}
    • {m} 前面的原子出现m次
    • {m,n} 前面的原子出现m到n次
    • {m,} 前面出现的原子个数m次以上
    • 贪婪匹配
      • 正则默认会贪婪匹配,阻止贪婪匹配在数量修饰符后面加?
      • /w+?e/.exec("orangere") 只会匹配orange而不是orangere

    5.指定匹配的位置 (对原子位置的修饰)

    •  单词边界

    • B 不是单词边界

    • ^ 字符串开始边界

    • $ 字符串结束边界

    • 先行断言(正向预查) (?=)

    • 负向先行断言(负向预查) (?!)

        //只能匹配后面的,不能匹配前面
        console.log(/(?=p)apple/.exec("apple"));//null
        console.log(/(?=p)apple/.exec("papple"));//null
        console.log(/apple(?=p)/.exec("applep"));//数组
      
        /*永远不可能满足*/
        console.log(/^apple(?=p)$/.exec("applep"));//null
      

    6. 选择修饰符

    • |逻辑或
    • ab(c|d)ef匹配abcef 或 abdef

    7. 模式单元 ()

    • 改变优先级

    • 把多个原子当做一个原子

    • 把模式单元匹配的内容暂存内存 (?:) 可以取消暂存内容

    • 暂存内存的内容可以被反向引用

        <script>
        	//改变优先级
        	console.log(/apple|orange/.test("apple"));//true
        	console.log(/appl(e|o)range/.test("apple"));//false
        	console.log(/appl(e|o)range/.test("applerange"));//true
        	console.log("");
      
        	//把多个原子当做一个原子
        	console.log(/abc{4}/.test("abcccc"));//true
        	console.log(/(abc){4}/.test("abcccc"));//false
        	console.log(/(abc){4}/.test("abcabcabcabc"));//true
        	console.log("");
      
        	//模式单元的内容会 单独存储到内存中
        	console.log(/abc/.exec("123abc123abc"));
        	/*["abc", index: 3, input: "123abc123abc"]*/
        	console.log(/a(b)c/.exec("123abc123abc"));
        	/*["abc", "b", index: 3, input: "123abc123abc"]*/
        	console.log(/(ab)c/.exec("123abc123abc"));
        	/*["abc", "ab", index: 3, input: "123abc123abc"]*/
        	console.log(/(ab)(c)/.exec("123abc123abc"));
        	/*["abc", "ab", "c", index: 3, input: "123abc123abc"]*/
        	console.log(/(ab)(?:c)/.exec("123abc123abc"));
        	/*["abc", "ab", index: 3, input: "123abc123abc"]*/
      
        </script>
      

    8. 修饰符(模式修正符)

    • i 正则表达式不区分大小写

    • m 允许多行(换行被当做字符串结束符)

    • g 全局匹配

        <script>
        	//i 不区分大小写
        	console.log(/^aAbB$/.test("aabb"));//false
        	console.log(/^aAbB$/i.test("aabb"));//true
        	console.log("");
      
        	//m 多行模式 字符串边界
        	console.log(/^a/.exec("orange
      apple"));null
        	
        	console.log(/^a/m.exec("orange
      apple"));
        	/*["a", index: 7, input: "orange↵apple"]*/
        	console.log(/w$/m.exec("orange
      apple"));
        	/*["e", index: 5, input: "orange↵apple"]*/
        	console.log(/w$/.exec("orange
      apple"));
        	/*["a", index: 7, input: "orange↵apple"]*/
        </script>
      

    三、 正则的使用

    1.RegExp对象

    • test() true/false
    • exec() 数组/null

    2.String对象

    • search() 匹配成功(第一次满足正则的位置) 匹配失败(-1)

    • match() 匹配成功(返回数组 全局匹配影响) 失败(null)

    • replace() 替换

    • split() 把字符串分割为数组

        <script>
        	//search
        	console.log("abc123".search(/d{2}/));//3
        	console.log("abc123".search(/^d{2}/));//-1
      
        	//match
        	console.log("1abc34io".match(/[a-z]{2}/));
        	/*["ab", index: 1, input: "1abc34io"]*/
        	console.log("1abc34io".match(/[a-z](d)/));
        	/*["c3", "3", index: 3, input: "1abc34io"]*/
        	console.log("1abc34io".match(/[a-z]{2}/g));
        	/* ["ab", "io"]*/
        	console.log("1abc34io".match(/[a-z]{9}/g));//null
        	console.log("");
      
        	//replace
        	console.log("helloleelag".replace("l","呀"));
        	/*he呀loleelag*/
        	console.log("helloleelag".replace(/l/,"呀"));
        	/*he呀loleelag*/
        	console.log("helloleelag".replace(/l/g,"呀"));
        	/*he呀呀o呀ee呀ag*/
        	console.log("helloleelag".replace(/w/g,"呀"));
        	/*呀呀呀呀呀呀呀呀呀呀呀*/
        	console.log("");
      
        	//split
        	var message="jim.jack,rose,tom,lili,yanyan";
      
        	console.log(message.split(","));
        	/*["jim.jack", "rose", "tom", "lili", "yanyan"]*/
        	console.log(message.split(/[,.]/));
        	/*["jim", "jack", "rose", "tom", "lili", "yanyan"]*/
        </script>
  • 相关阅读:
    404页面应该怎么做?
    网站被百度和google封了,怎么办?
    如何下载没有提供下载按钮的网页视频
    新手学习.net编程计划-1
    windows7旗舰版下载出现蓝屏代码50怎么办?
    微软已于10月底停止销售预装Windows 7/8.1的电脑
    Html代码seo优化最佳布局实例讲解
    下载类网站的SEO优化方面技巧
    命名空间“System.Windows.Forms”中不存在类型或命名空间名称“DataVisualization”。是否缺少程序集引用?
    SQL、LINQ、Lambda 三种用法(转)
  • 原文地址:https://www.cnblogs.com/1666818961-lxj/p/7436764.html
Copyright © 2011-2022 走看看