摘要:主要有两种操作匹配和捕获链接描述正则表达式语法正则表达式的创建正则表达式是有元字符和修饰符组成,将元字符和修饰符写在中。
正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑,许多程序设计语言都支持利用正则表达式进行字符串操作。主要有两种操作:匹配和捕获 链接描述正则表达式语法
正则表达式的创建
正则表达式是有元字符和修饰符组成,将元字符和修饰符写在" // "中。
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
摘要:控制权和传动这两个词可能在搜一些博文或者资料的时候会遇到,这里做一个解释先控制权是指哪一个正则子表达式可能为一个普通字符元字符或元字符序列组成在匹配字符串,那么控制权就在哪。 温馨提示:文章很长很长,保持耐心,必要时可以跳着看,当然用来查也是不错的。 正则啊,就像一座灯塔,当你在字符串的海洋不知所措的时候,总能给你一点思路;正则啊,就像一台验钞机,在你不知道用户提交的钞票真假的时候,...
摘要:写在前面正在看的源码看到了部分感觉以前看的正则表达式基础知识已经完全不够用了现翻阅博客资料将一些中正则表达式难用的部分总结归纳方便自己和友翻阅正则分组重复匹配对于重复的匹配我们经常使用到正则表达式的分组功能我们使用正则匹配地址来实践一下假 [TOC] 写在前面 - Lionad 正在看VueJS的源码, 看到了HtmlParser部分, 感觉以前看的正则表达式基础知识已经完全不够用了,...
阅读 1662·2021-11-23 09:51
阅读 3116·2021-09-26 10:21
阅读 772·2021-09-09 09:32
阅读 848·2019-08-29 16:06
阅读 3278·2019-08-26 13:36
阅读 759·2019-08-26 10:56
阅读 2548·2019-08-26 10:44
阅读 1130·2019-08-23 14:04