资讯专栏INFORMATION COLUMN

JS正则表达式

zoomdong / 879人阅读

摘要:主要有两种操作匹配和捕获链接描述正则表达式语法正则表达式的创建正则表达式是有元字符和修饰符组成,将元字符和修饰符写在中。

正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑,许多程序设计语言都支持利用正则表达式进行字符串操作。主要有两种操作:匹配和捕获 链接描述
正则表达式语法

正则表达式的创建
正则表达式是有元字符和修饰符组成,将元字符和修饰符写在" // "中。
eg: var reg = /d+/g;//意思是在全局中的多个数字

元字符:

: 转义字符

^: 以某一个元字符开始

$: 以某一个元字符结束

: 匹配一个换行

".":除了 以外的任意字符

(): 分组

x|y: x或者y中第一个

[xyz]:x或者y或者z中的一个

[^xyz]:除了三个以外的任意一个字符

[a-z]:a 和 z 之间的任意字符

[^a-z]:除了a 和 z 之间的任意字符

d:表示 0-9 之间的数字

D:除了0-9之间的数字以外的任意字符

:匹配一个边界符 w1 w2

w:数字、字母、下划线中的任意字符 [0-9a-zA-Z_]

s:匹配一个空白字符 空格、一个制表符、换页符...

量词元字符(数量元字符)

* :出现零到多次

+:出现一到多次

?:出现零次或者一次

{n}:出现 n 次

{n,}:出现 n 到多次

{n,m}:出现 n 到 m 次

标志字符

g:全局搜索,记忆方式 global

i:不区分大小写,记忆方式 ignore

m:多行搜索

使用方式

正则对象的方法
1.test() 方法用于检测一个字符串是否匹配某个模式,若匹配,返回true,否则返回false
eg:手机号验证

    

2.exec()方法用于检索字符串中的正则表达式的匹配,若匹配,返回匹配值,否则返回false

匹配时,返回值跟 match 方法没有 g 标识时是一样的。数组第 0 个表示与正则相匹配的文本,后面 n 个是对应的 n 个捕获的文本,最后两个是对象 index 和 input同时它会在正则实例的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把正则实例的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。有没有 g 标识对单词执行 exec 方法是没有影响的,只是有 g 标识的时候可以反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0
        var string = "2018.07.23";
        var regex2 = /(d+)/g;
        console.log( regex2.exec(string) );
        console.log( regex2.lastIndex);
        console.log( regex2.exec(string) );
        console.log( regex2.lastIndex);
        console.log( regex2.exec(string) );
        console.log( regex2.lastIndex);
        console.log( regex2.exec(string) );
        console.log( regex2.lastIndex);


其中正则实例lastIndex属性,表示下一次匹配开始的位置.比如第一次匹配了“2017”,开始下标是0,共4个字符,因此这次匹配结束的位置是3,下一次开始匹配的位置是4。

从上述代码看出,在使用exec时,经常需要配合使用while循环:
        var string = "2018.07.23";
        var regex2 = /(d+)/g;
        var result;
        while ( result = regex2.exec(string) ) {
            console.log( result, regex2.lastIndex );
        }

正则的匹配

字符匹配

精确匹配就不说了,比如/hello/,也只能匹配字符串中的"hello"这个子串。
正则表达式之所以强大,是因为其能实现模糊匹配。

匹配多种数量

        var str = "cde cdde cffffde cffffdde cffffddde";
        var reg = /cd{3,5}e/g;
        console.log(str.match(reg));

贪婪性和懒惰性

贪婪:eg:

        var str = "123";
        var reg = /d+/g;
        console.log(reg.exec(str));

懒惰("//"正则表达式末尾加上"?")eg:

        var str = "123";
        var reg = /d+?/g;
        console.log(reg.exec(str));

匹配多种情况

用字符组[]来匹配多种情况,其他几种形式(dDsSwW)都可以等价成这种。eg:
    

替换

eg:

    

读正则

不仅自己会写正则,还要读懂其他人写得正则

操作符的优先级是从上到下,由高到低的,所以在分析正则的时候可以根据优先级来拆分正则,比如      /ab?(c|de*)+|fg/

因为括号是一个整体,所以/ab?()+|fg/,括号里面具体是什么可以放到后面再分析

根据量词和管道符的优先级,所以a, b?, ()+和管道符后面的f, g

同理分析括号里面的c|de => c和d, e

综上,这个正则描述的是

总结

上面是我今天学习的内容,在这里分享给大家,有什么不对的可以留言给我,争取做到最好,希望大家有什么好的建议,好的文章也可以分享给我,我们共同努力!希望大家多多分享,下面是我的微信号码,有对前端感兴趣的朋友我们可以交流一下:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/113525.html

相关文章

  • 正则JS中的正则

    摘要:注意本文将正则与中的正则分开讨论。正则零宽断言更多参考各种语言对于正则不同支持参考单行模式与多行模式通过设置正则表达式后的修饰符可开启对应的匹配模式单行模式和多行模式。 最近这段时间帮同学处理一些文档, 涉及到一些结构化文档的工作大部分都得使用正则表达式, 之前对于正则的认识大多来源于语言书上那几页的介绍, 自己也没有用过几次。这里将我之前感到模糊的概念作个整理。因为对JS了解多点,所...

    firim 评论0 收藏0
  • 正则达式

    摘要:本文内容共正则表达式火拼系列正则表达式回溯法原理学习正则表达式,是需要懂点儿匹配原理的。正则表达式迷你书问世了让帮你生成和解析参数字符串最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。 JS 的正则表达式 正则表达式 一种几乎可以在所有的程序设计语言里和所有的计算机平台上使用的文字处理工具。它可以用来查找特定的信息(搜索),也可以用来查...

    bang590 评论0 收藏0
  • JS正则达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路

    摘要:控制权和传动这两个词可能在搜一些博文或者资料的时候会遇到,这里做一个解释先控制权是指哪一个正则子表达式可能为一个普通字符元字符或元字符序列组成在匹配字符串,那么控制权就在哪。 温馨提示:文章很长很长,保持耐心,必要时可以跳着看,当然用来查也是不错的。 正则啊,就像一座灯塔,当你在字符串的海洋不知所措的时候,总能给你一点思路;正则啊,就像一台验钞机,在你不知道用户提交的钞票真假的时候,...

    Michael_Lin 评论0 收藏0
  • 正则达式

    摘要:最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。学习目标了解正则表达式语法在中使用正则表达式在中使 JS高级技巧 本篇是看的《JS高级程序设计》第23章《高级技巧》做的读书分享。本篇按照书里的思路根据自己的理解和经验,进行扩展延伸,同时指出书里的一些问题。将会讨论安全的类型检测、惰性载入函数、冻结对象、定时器等话题。1. 安全的类型检测...

    yibinnn 评论0 收藏0
  • 『不再迷茫 - 正则达式JS正则要点梳理 持续更新

    摘要:写在前面正在看的源码看到了部分感觉以前看的正则表达式基础知识已经完全不够用了现翻阅博客资料将一些中正则表达式难用的部分总结归纳方便自己和友翻阅正则分组重复匹配对于重复的匹配我们经常使用到正则表达式的分组功能我们使用正则匹配地址来实践一下假 [TOC] 写在前面 - Lionad 正在看VueJS的源码, 看到了HtmlParser部分, 感觉以前看的正则表达式基础知识已经完全不够用了,...

    SQC 评论0 收藏0
  • JS中的正则达式

    摘要:构造函数可以有两个字符串参数,第一个参数包含正则表达式的主体部分。只读的布尔值,说明这个正则表达式是否带有修饰符。中正则的扩展构造函数在中,只能接受字符串作为参数,允许其直接接受正则表达式作为参数。 上文传送门:初探正则表达式 正则表达式是一个描述字符模式的对象,JavaScript 的 RegExp 类表示正则表达式,String 和 RegExp 都定义了方法,后者使用正则表达式进...

    Soarkey 评论0 收藏0

发表评论

0条评论

zoomdong

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<