摘要:以指定模式分割字符串,返回结果为数组。为什么牢记,有什么用看代码查找连续的相同的数字或者内容是用子表达式只有字表达是中匹配的内容才保存到缓存,这种行为叫捕获。
前言
正则表达式之所以强大,是因为其能实现模糊匹配,精确匹配没有任何价值。
正则表达式学习笔记 第一章 JavaScript原型对象与原型链 1.1 正则表达式概念RegExp:是正则表达式(regular expression)的简写,RegExp描述了一种字符串匹配的模式,可以用来检查一个字符串是含有某种子串,将匹配的子串做替换或者从某个串中取出来符合某个条件的子串等。
1.2 正则表达式的用处数据隐藏,数据采集(爬虫),数据过滤,数据验证(表单验证,手机号码,邮箱地址等),解析、格式检查等。
正则的定义格式也很简单:
var t="ahmatbekjappar"; var reg=/j/; console.log(reg.test(t));//判断我们查找字符是否存在,存在返回true第二章 标准库中的正则对象 2.1 创建正则对象
创建正则对象的方法有两种:实际开发中一般都采用字面量创建方法
1.字面量创建法:以斜杠表示开始和结束;2.构造函数生成对象:通过实例化得到对象;
var t="ahmatbekjappar"; var reg1=/j/;//方式1 var reg2=new RegExp("j");//方式2 console.log(reg1.test(t)); console.log(reg2.test(t));
区别:
相同点:效果完全一样,也就是等价的2.2 匹配模式不同点:第一种方法是编译时新建正则表达式,第二种方法在运行时新建正则表达式,也就是创建时机不一样。
正则表达式是匹配模式,要么匹配字符,要么匹配位置
匹配模式指的是修饰符,表示正则匹配的附加规则,放在正则模式的最后面(尾部)。修饰符可以单个使用,也可以是多个一起用。
格式:var reg=/正则表达式/匹配模式;
在正则表达式中,匹配模式常用的两种形式:g和i
g:global缩写,代表全局匹配,匹配出所有满足条件的结果,不加g的话第一次匹配成功后正则对象就停止继续匹配。i:ignore缩写,代表忽略大小写,正则匹配时默认区分大小写,加了i就自动忽略字符串大小写
var t="AklmanAhmatbeK"; var reg1=/akl/; var reg2="akl/i; console.log(reg1.test(t));//false console.log(reg1.test(t));//true2.3 正则对象的方法
对象.test(str):判断字符串是否具有指定模式的子串,返回结果是一个布尔值;
对象.exec(str):返回字符串指定模式的子串,一次只能获取一个与匹配的结果;
2.4 String对象的方法
search(reg):与indexOf非常相似,返回指定模式的子串在字符串首次穿线的位置。
match(reg):以数组的形式返回指定模式的字符串,可以返回所有匹配的结果。
replace(reg,"将替换的字符"):把指定模式的子串进行替换操作。
split(reg):以指定模式分割字符串,返回结果为数组。
第三章 要牢记住的概念
子表达式:在正则表达式中,通过一对圆括号起来的内容,被称之为“子表达式”;var reg=/d(d)d/gi;
捕获:在正则表达式中,子表达式匹配到相应的内容时,系统会自动捕获这个行为,然后将子表达式匹配到的内容放入系统的缓存中,这过程就是“捕获”。
反向引用:在正则表达式中,可以使用n(n>0,正整数,代表系统中的缓存区编号)来获取缓冲区中的内容,这个过程就是“反向引用”。
为什么牢记,有什么用?看代码:查找连续的相同的数字或者内容是用
第四章 正则表达式应用 4.1 正则表达式的组成正则表达式是由普通字符(例如字符a到z)以及特殊字符(成为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。正则表达式三步走:1.查什么?2.查多少?3.从哪查?
4.2 匹配符(查什么)匹配符:字符匹配符用于匹配某个或某些字符;例如d就是匹配0-9的数字。
在正则表达式中,通过一对中括号起来的内容,称之为"字符簇"。字符簇代表的是一个范围,但是匹配时,只能匹配某个范围中的固定的结果。
字符簇 | 含义 |
---|---|
[a-z] | 匹配字符a到字符z之间的任一字符 |
[A-Z] | 匹配字符A到字符Z之间的任一字符 |
[0-9] | 匹配数字0到9之间的任一数字 |
[0-9a-z] | 匹配数字0到9或者字符a到z之间的任一字符 |
[0-9a-zA-Z] | 匹配数字0到9或字符a到字符z之或者字符A到字符Z之间的任一字符 |
[abcd] | 匹配字符a或者字符b或者字符c或者字符d |
[1234] | 匹配字符1或者字符2或者字符3或者字符4 |
在字符簇中,通过一个^(脱字符)来表示取反的含义:
字符簇 | 含义 |
---|---|
1 | 匹配除字符a到字符z之外的任一字符 |
2 | 匹配除字符a,b,c,d外的字符 |
3 | 匹配除数字0到9之外的任一字符 |
常用的比较特殊的匹配符:
字符簇 | 含义 |
---|---|
d | 匹配一个数字字符,与使用[0-9]等价 |
D | 匹配一个非数字字符,还可以使用[脱字符0-9] |
w | 匹配包括下划线的任何字母数字下划线字符,还可以使用[0-9a-zA-Z] |
W | 匹配任何非字母数字下划线字符,还可以[脱字符w] |
s | 匹配任何空白字符 |
S | 匹配任何非空白字符,还可以使用[脱字符s] |
.(是个点) | 匹配除"n"之外的任何单个字符 |
[u4e00-u9fa5] | 匹配中文字符中的任一字符 |
限定符可以指定正则表达式的一个给定字符必须要出现多少次才能满足匹配。
字符簇 | 含义 |
---|---|
* | 匹配前面的子表达式零次或多次,0到多 |
+ | 匹配前面的子表达式一次或多次,1到多 |
? | 匹配前面的子表达式零次或一次,0或1 |
{n} | 匹配确定的 n 次 |
{n,} | 至少匹配n 次 |
{n,m} | 最少匹配 n 次且最多匹配 m 次 |
对qq号码进行校验要求5-10位,不能以0开头,只能是数字
var str="我的QQ20869921366666666666,nsd你的是6726832618吗?"; // var reg=/d{3,7}/; var reg=/[1-9]d{4,10}/g;//正则表达式默认情况下使用贪婪模式,在满足条件的前提下尽量多的查找匹配 console.log(str.match(reg)); var reg1=/[1-9]d{4,10}?/;//非贪婪模式,惰性模式:在满足条件的前提下,尽量的少查找匹配 console.log(str.match(reg1)); //?跟在表达式后面是限定符{0,1} //?跟在限定符后面,使用惰性模式(非贪婪模式) var reg2=/[1-9]d??/; //reg2和reg3是一个意思 var reg3=/[1-9]d{0,1}?/; console.log(str.match(reg2)); console.log(str.match(reg3));
正则表达式中默认情况下能匹配多就不会匹配少,这种匹配模式就是贪婪模式(贪婪匹配)。
如果想少匹配或者限定的位数匹配则使用非贪婪模式,也就是优先匹配满足条件情况下的优先匹配少的,这种非贪婪模式也被称为惰性匹配。
4.4 定位符(从哪查)正则表达式只会到字符串去寻找是否有与之匹配的内容,如果有就默认是正确的,就不会考虑其字符串本身是否 合法的。因此必须使用定位符来将一个正则表达式固定在一行的开始或者结束;也可以创建只在单词内或者只在单词的开始或结尾处出现的正则表达式。
字符簇 | 含义 |
---|---|
^ | 匹配输入字符串的开始位置 |
$ | 匹配输入字符串的结束位置 |
b | 匹配一个单词边界 |
B | 匹配非单词边界 |
注意:脱字符放在字符簇中是取反的意思,放在整个表达式中是开始位置的。
问题1:用正则表达式,匹配字符串"lsd15309873475"中的的手机号
/**分析 *手机号第一位必须是1,第二位必须是3-8之间的数字,第三位到第十一位是只要0-9之间的数字即可 **/ var str="lsd15309873475"; var reg1=/1[345678]d{9}/; console.log(str.match(reg1));//给5分 var reg2=/^1[34578]d{9}$/; console.log(str.match(reg2));//给满分
问题2:
var str = "i am zhangsan"; //an必须是一个完整的单词 var reg = /an/; console.log(str.match(reg)); //an不能是单词的开始,只能是单词的结束 var reg1 = /Ban/; console.log(str.match(reg1));4.5 转义字符
因为在正则表达式中 .(点) + 等是属于表达式的一部分,但是我们在匹配时,字符串中也需要匹配
这些特殊字符,所以,我们必须使用 反斜杠 对某些特殊字符进行转义;
需要转义的字符 | |
---|---|
点. | |
小括号() | |
中括号[] | |
左斜杠/ | |
右斜杠 | |
选择匹配符 |
问题1:匹配一个合法的网址URL:
var str="http://aklman.com"; //对于. /都必须转义匹配 var reg=/w+://w+.w+/; console.log(str.match(reg));//http://aklman.com
问题2:使用正则表达式验证邮箱是否合法
var str="ak@aklman.com"; var reg=/w+@[0-9a-z]+(.[0-9a-z]{2,6})+/; console.log(str.match(reg));4.6 或者的用法
查找所有的苹果产品:
var s="ipad ipod iphone imac itouch iamshuai"; var reg=/i(pad|pod|phone|mac|touch)/g; console.log(s.match(reg));4.7 预查 4.7.1 正向预查,正预测,前瞻,先行断言
问题1:请把ing结尾的单词的词根部分(即不含ing部分)找出来:
var str="sorry,when i am working,do not calling me!"; //只是为了找到ing结尾的单词,但并不是词根部分 var reg1=/w+ing/g;//["working", "calling"] var reg2=/w+(?=ing)/g;//["work", "call"] console.log(str.match(reg1)); console.log(str.match(reg2));4.7.2 负向预查,负预测,前瞻,先行否言
问题2:把不是ing结尾的单词找出来
var str="sorry,when i am working,do not calling me!"; var reg=/w+(?!ing)w{3}/g;//负向预查、负预测、前瞻 console.log(str.match(reg));//["sorry", "when"]补充知识点
量词 | 含义 |
---|---|
n+ | 匹配任何包含至少一个 n 的字符串 |
n* | 匹配任何包含零个或多个 n 的字符串 |
n? | 匹配任何包含零个或一个 n 的字符串 |
n{x} | 匹配包含 X 个 n 的序列的字符串 |
n{x,y} | 匹配包含 X 至 Y 个 n 的序列的字符串 |
n{x,} | 匹配包含至少 X 个 n 的序列的字符串 |
n$ | 匹配任何结尾为 n 的字符串 |
^n | 匹配任何开头为 n 的字符串 |
?=n | 匹配任何其后紧接指定字符串 n 的字符串 |
?!n | 匹配任何其后没有紧接指定字符串 n 的字符串 |
W3school
菜鸟教程
JavaScript权威指南(第6版)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28388.html
摘要:以指定模式分割字符串,返回结果为数组。为什么牢记,有什么用看代码查找连续的相同的数字或者内容是用子表达式只有字表达是中匹配的内容才保存到缓存,这种行为叫捕获。 前言 正则表达式之所以强大,是因为其能实现模糊匹配,精确匹配没有任何价值。 正则表达式学习笔记 第一章 JavaScript原型对象与原型链 1.1 正则表达式概念 RegExp:是正则表达式(regular expressio...
摘要:声明语句是可选部分如果存在需要放在文档的第一行所谓的文档声明就是告诉解析器当前文档格式版本号以及编码格式。所有的元素都必须是成对闭合标签非闭合标签是非法的,解析器将报错,不无正常解析标签对大小写敏感必须头尾标签一致。 前言 一直想系统性的学XML,就没时间学,今晚抽出几个小时时间学完了XML。过几天再过来看看,背一背应该就差不多,记得东西较多,没什么难理解的。 XML数据传输格式 第一...
摘要:声明语句是可选部分如果存在需要放在文档的第一行所谓的文档声明就是告诉解析器当前文档格式版本号以及编码格式。所有的元素都必须是成对闭合标签非闭合标签是非法的,解析器将报错,不无正常解析标签对大小写敏感必须头尾标签一致。 前言 一直想系统性的学XML,就没时间学,今晚抽出几个小时时间学完了XML。过几天再过来看看,背一背应该就差不多,记得东西较多,没什么难理解的。 XML数据传输格式 第一...
摘要:参考资料慕课网鬼斧神工之正则表达式正则表达式后向引用详解正则表达式分钟入门教程什么是正则表达式正则表达式是字符串的搜索和匹配的工具。贪婪模式懒惰模式后向引用分组捕获的内容可以在表达式或其他程序中作进一步的处理。 参考资料 慕课网-鬼斧神工之正则表达式正则表达式后向引用详解正则表达式30分钟入门教程 什么是正则表达式? 正则表达式是字符串的搜索和匹配的工具。 正则表达式工具 一个测试正...
阅读 1382·2021-10-14 09:43
阅读 972·2021-09-10 10:51
阅读 1423·2021-09-01 10:42
阅读 2172·2019-08-30 15:55
阅读 563·2019-08-30 15:55
阅读 2325·2019-08-30 14:21
阅读 1678·2019-08-30 13:04
阅读 3450·2019-08-29 13:09