正则表达式(js) 含有(正向预查和负向预查)
来源:互联网 发布:网络信息安全培训课件 编辑:程序博客网 时间:2024/06/05 11:52
第一次见到正则表达式的时候,感觉好难啊,要记得东西怎么那么多.学了好几遍,但还是很蒙圈,可能是用的少,平时用的时候也就那么基础需要使用,再者就是复制粘贴正则表达式.
那么什么是正则表达式呢?正则表达式就是一个描述字符规则的对象.那为什么会有正则表达式呢,这里引用沫晴姐姐的一句话,就是因为计算机笨呗(沫晴姐姐引用别人的话).比如123@qq.com,这个一看就知道是邮箱,课时计算机还有一个个的验证.
不说了,直接进入主题吧.
为了减轻验证数据的工作量,用正则就行.
如何创建正则表达式
1.第一种方式:
var reg = new RegExp("string","lg");//第二个参数为修饰符
i: 表示忽略大小写,英文ignore
g:表示全局匹配,即查找所有的,英文global
2.第二种方式:
var reg = /string/ig;
正则对象的方法
test:用来检索指定值,返回值为true和false
let reg = /s/ig;console.log(reg.test("study"));///返回trueconsole.log(reg.test("tudy"));///返回false
exec:用来检索字符串中的是否有匹配值,有的话则返回一个数组,没有匹配到,则返回null.
let reg = /s/ig;console.log(reg.exec("studystudy"));///[ 's', index: 0, input: 'studystudy' ]console.log(reg.exec("studystudy"));///[ 's', index: 5, input: 'studystudy' ],继续上一次的位置继续console.log(reg.exec("good"));//null
注意:若没有指定g修饰符,则每次从开始匹配,否则,conf上次匹配结束为止开始匹配
字符串函数
search: 匹配是否有匹配值,返回字符串中的第一个与正则表达式想匹配的子字符串的起始位置,没有找到返回-1.
let reg = /s/ig;console.log("studys".search(reg)); ///打印0,有两个s,只打印了第一个位置的s
match: 找到一个或多个正则表达式的匹配值
let reg = /s/ig;console.log("studys".match(reg)); ///[ 's', 's' ]
replace: 替换与正则表达式匹配的值
let reg = /s/ig;console.log("studys".replace(reg,"***")); /// 返回***tudy***
split: 把字符串分割成数组
let reg = /s/ig;console.log("goodstudysboy".split(reg)); ///[ 'good', 'tudy', 'boy' ]
正则表达式构成
正则表达式由普通字符(例如字母)和特殊字符(例如+)构成,组成的文字模式.
1.字符匹配符
\s : 空格
\S : 非空格
\d : 数字
\D : 非数字
\w : 字符 ( 字母 ,数字,下划线_ )
\W : 非字符例子:是否有不是数字的字符
let reg = /\d/ig;console.log("123go567odstudysboy".match(reg)); ///打印[ '1', '2', '3', '5', '6', '7' ]
(其余的我就不试了)
[xyz]: 匹配x,y,z任意一个字符, 例如[23w]
[^x,y,z]: 匹配不包含x,y,z的字符, 例如[^12w]
[a-z]: 匹配a-z之间的任意字符, 例如[1-5]
[^a-z]匹配非a-z之间的任意字符, 例如[^1-5]
2.限定符
* : 匹配>=0次
+ : 匹配>=1次
? : 匹配0或1次
{n} : 匹配n次
{n, } : 匹配至少n次
{n, m} : 匹配至少n次,最对m次
注意: 正则表达式很贪婪的,所以他会尽可能的多的去匹配,
凡是限定符后面紧跟? , 则他会减少贪婪的欲望
3.定位符
^ : 匹配字符串开始的位置
$ : 匹配字符串结束的位置
\b : 匹配单词的边界, 就是单词和空格之间的位置
\B : 匹配非单词边界
4.转义字符
\ : 转义某也特殊的字符, 例如匹配$符号
5.转义字符
| : 匹配多个规则
6.特殊用法
() : 捕获型分组,即子表达式,使用\1,\2,\3…对子组的引用
(?:pattern) : 非捕获型分组.匹配pattern但不获取匹配结果。也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。
(?=pattern) : 正向预查,在任何匹配pattern的字符串开始处匹配字符串.非获取字符串.就是匹配pattern字符串,但不返回pattern,返回的是与pattern匹配的字符串但要把pattern去掉.
举个例子,我们 匹配windows后面是7,8,8.1的,只留windows
var str = "windows98 windows7 windows8 windows8.1 windows10 windowsVista windowsXP";var reg = /windows(?=7|8\.1|8)/g;var a = str.match(reg);console.log(a); //返回[ 'windows', 'windows', 'windows' ]
(?!pattern) : 负向预查,匹配与正向预查相反,返回的是不是匹配到pattern的值,也就是正向预查的补集,举个栗子,匹配后面windows后面不是7,8,8.1的值,只留windows
var str = "windows98 windows7 windows8 windows8.1 windows10 windowsVista windowsXP";var reg = /windows(?!7|8\.1|8)/g;var a = str.match(reg);console.log(a);////返回[ 'windows', 'windows', 'windows' ,'windows']
还是不明白的看图,图画的丑,别介意啊,毕竟我不是艺术生.
图中,大黑框相当于字符串,小框表示单词,然后给每个小框编号,黑阴影部分表示要匹配的部分,当使用正向预查时,匹配的结果是: 1中的空白部分和4中的空白部分. 当使用负向预查时,匹配的结果是: 2中和3中的空白部分
有错误的地方,请指出谢谢
- 正则表达式(js) 含有(正向预查和负向预查)
- 正则表达式: 正向预查和负向预查
- 正则表达式: 正向预查和负向预查
- 谈谈js中的正则表达式第一篇之正向肯定预查和正向否定预查
- 【正则】正向预查
- 正则表达式:正向预查与反向预查
- 正则表达式 零宽断言(正向和负向)
- 正则表达式- 预查
- JS 之 (五)正向反向预查、正则案例、贪吃蛇案例
- 正则表达式之预查
- JS正则表达式速查
- 正则表达式 负向前瞻
- 正则表达式预查(?:)使用心得
- 正则表达式中的正/反向预查
- 正则表达式中的正/反向预查
- 正则表达式速查和常用正则
- nginx reload 二级目录地址重写,正向负查
- 正则表达式速查
- C++骚操作
- 如何在Windows上安装mysql
- Hibernate之集合映射
- 2017暑期留校及物联网大赛经验总结
- HDU 4717 三分板子
- 正则表达式(js) 含有(正向预查和负向预查)
- 【51Nod1454】升排列
- SQL中 group by ....having
- myeclipse中svn配置及连接svn服务器
- Refletion2017.9.5
- 初识caffe2
- C和指针 十二章 双链表没有实现
- 【多校联合】(HDU6043)KazaQ's Socks
- 原码,补码,反码详解: