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=>['"]
进行再次的匹配筛选,就可以匹配到左侧和右侧的引号。
$%’abc’123
let reg1 = /(['"])[^'"]*\1/
let str =
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点多了,熬夜总算把文章写完,觉得有帮助打赏一下吧!