javascript之正则表达式的入门部分

js正则表达式

一般人看到正则表达式都会头疼的要命,我的天,这是什么鬼,罗马文么。额。。。。其实不是这样的,它只是一些特殊字符的组合用来匹配字符串的?那么问题来了?为什么要用正则表达式匹配?=>因为简单,可以少写代码。怎么匹配?见下文。。。

1.表达式的定义 =>定义一般有两种方式:

1.直接量=>如这种姿势

var data = /^s/ console.log('sabc'.search(data)) 控制台显示0
ps: // 上述代码是这样的 直接量的正则匹配一般是以 / * 内容* / 两个反斜杠里面是要匹配的字符串 而字符串有专门用于匹配正则的函数,search是找出匹配字符串的并返回它的位置,如果找不到就返回-1.而/s/ 是用于匹配s字母的 /^s/是匹配s开头的字母的,所以返回0。

2.RegExp构造函数 定义 `

var data = new RegExp(“^s”),用法和第一种类似,console.log(‘sabc’.search(data))`结果是一样的。
如果还是不懂上面的^的用法,请往下看 =>嘻嘻嘻….
这里写图片描述

2.正则表达式字符的使用

当你读代码读到”+?”是不是有点不理解?更有甚者其实是=> ‘$.*()[]{}+?.()[]{}+?()[]{}+?………’,不要抑制自己,有不满就要大声的吼出来,这TM的是啥!!好了,发泄完了,我们又要继续学习了。

1.直接量字符 字符匹配`

\o //NULL字符(\u0000)
\t //制表符(\u0009)
\n //换行符(\u000A)
\v //垂直制表符(\u000B)
\f //换页符(\u000C)
\r //回车符(\u000D)`
\xnn //由十六进制数nn指定的拉丁字符,例如,\x0A等价于\n
\uxxxx //由十六进制数nnnn指定的Unicode字符,例如\u0009等价于\t
\cX //控制字符^X,例如\cJ等价于换行符\n
例子:恕我直言,这些字符比较奇葩,我一般都是匹配字符串或者数字等等。用的比较少,不举例子了

2.字符类 […] //方括号内的任意字符

[^…] //非方括号内的任意字符
. //除了换行符和其他的Unicode行终止符之外的任意字符
\w //任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
\W //任何非ASCII字符组成的单词,等价于[^a-zA-Z0-9]
\s //任何Unicode空白字符
\S //任何非Unicode空白字符,注意\W和\S的区别
\d //任何ASCII数字,等价于[0-9]
\D //任何非ASCII数字,等价于[^0-9]
[\b] //退格直接量(特例)`

例子:let data2 = /abc\d/ console.log('abc11'.search(data2)) ==>值: 0
let data3 = /[abc]\d/ console.log('abc11'.search(data3)) ==>值: 2

为什么呢?/abc/是用来匹配字符abc这个大家肯定不会陌生了,\d 是用来匹配数字的,等价于[0-9] 所以控制台返回0, 第二个[abc]是用于匹配括号中所包含的字符,注意哦。是所包含的字符就是说他是一个组合{a,b,c}而不是abc这个要理解哈!

3.正则表达式 => 重复字符语法 ` 字符 含义

{n,m} //匹配前一项至少n次,最多m次
{n,} //匹配前一项至少n次
{n} //匹配前一项n次
? //匹配前一项0次或者1次,也就是说前一项是可选的,等价于{0,1}
+ //匹配前一项至少一次,等价于{1,}
* //匹配前一项至少0次,等价于{0,}
例子=>开始了
/\d{2,4}/=> 匹配 2-4个数字
/\w{3}\d/=>匹配3个单词和一个数字
/\s+java\s+/=>匹配前后带有一个或多个空格的字符串java
/[^(]*/` =>匹配0项或多项非左括号开头的字符

4.选择分组和引用

或‘|’运算符的使用 => /ab|cd|ef/ 表示可以匹配ab或cd或ef中的任意一个,注意的是,选择项的匹配顺序的从左到右,如果左边的匹配,就会忽略了右边的,其中最常见的就是圆括号 “()”的使用

作用1:,是把单独的项,组合成子表达式,以便可以向处理单元那样使用"|","*","+","?"等等
例子=> /abc(java)?/
可以用于匹配字符串“abc”后面可以加上0个或一个字符串“java”。

作用2:,完整模式中定义子模式,
let reg = /[a-z]+\d+/; console.log('$aaa1232'.search(reg)),
这时,控制台显示的是1 ,不难看出,上面要匹配的是1到n个字符和1到n个数字。比如我们更关心匹配到的数字是什么,那么我们就可以这样做
let reg = (/[a-z]+(\d+)/);
就可以获取到数字了。

作用3:*()的引用,划重点,这个认真看* ()可以用于同一正则后部引用前部的子表达式: 后面加上 \n
例子: /['"][^'"]*['"]/
这个表达式不难看出,要匹配的是“内容” 单引双引先忽略
[^'"]表示除'"之外的一切,而这时,我们想要匹配表达式
/(['"])[^'"]*\1/
这个\1是是什么鬼??没听过啊?是这样的\1引用的是第一个子表达式,也就是表达式里面()里的东东,但是他是对之前符合正则条件的字符串再次就行筛选,我们这个表达式可以成两部
(['"])[^'"]* 匹配到是"abc 和字符"123 然后在对第一个表达式即
\1=>['"] 进行再次的匹配筛选,就可以匹配到左侧和右侧的引号。
let reg1 = /(['"])[^'"]*\1/
let str =
$%’abc’123
console.log(str.search(reg1),str)
let reg2 = /(['"])[^\1]*\1/
console.log(str.search(reg2),str)

控制台输入结果均是二,但是我在犀牛书上看到的,说第一种(reg1)的那种,不符合正则规范,说是会报错,然后并没有,我个人觉得是没什么问题的,有问题欢迎大家给我留言,大家互相讨论研究。

5.正则表达式的锚=>制定匹配位置

最常用的^符号/^s/=>匹配s开头的字符串
^ 匹配输入字符串开始的位置。
$ 匹配输入字符串结尾的位置。
\b 匹配一个字边界,即字与空格间的位置。
\B 非字边界匹配。

好了,正则大概讲完70%了!哈哈,配个喜悦的图片,然后继续!
这里写图片描述

3.用于匹配正则是String方法

1.search()方法 =>它的参数是一个正则表达式,返回第一个与之匹配的起始位置
例子:“Javascript”.search(/script/)
这时控制台会输出5

2. replace()方法 有两个参数,第一个是正则,第二个是字符串。用法是
用以执行检索然后替换,即找到匹配的正则,然后替换!
例子:let data3=/s/ console.log('s7s7sjdjsj'.replace(data3,'y'))
这时控制台输出 :y7s7sjdjsj

当然不会这么简单,其实还可以这么用
let data3=/(s)/
console.log('s7s7sjdjsj'.replace(data3,'"$1"y')) 控制台输出 :"s"y7s7sjdjsj

该方法是找到正则匹配的字串并把第一个$1替换掉

3.match()方法=>他是正则表达式最常用的方法,只有唯一一个参数,并返回匹配的数组集
例子:console.log("1s3a3c".match(/\d+/g)) //["1",'3','3']
4.最后一个是split() 用于分割"1a2a3a".split(/a/) //["1","2","3"]


回到家已经11点多了,熬夜总算把文章写完,觉得有帮助打赏一下吧!
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值