正则表达式
Posted hyh888
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。
1.什么是正则表达式
正则:是规定一个字符串中字符出现的规律的表达式
2.什么时候使用呢?
只要使用一个种规则,模糊匹配关键词时候使用
3.怎么用正则呢?
<1.最简单的正则就是直接写关键词原文
<2、字符集:规定字符串中某一位字符,备选字符列表 只有一个字符,但是有多重选择字符
语法:[备选字符列表]
每个字符集只能匹配一位字符,且每个字符其中至少匹配一次
例如:[微wv][信x] 匹配到的内容: 微信 wx vx 微x v信 w信
如果备选字符列表是连续的,可用-省略中间字符
例如:
一位数字:[0123456789] ==>[0-9]
一位小写字母:[a-z]
一位大写字母:[A-Z]
一位字母:[a-zA-Z]
一位汉字:[\\u4e00-\\u9fa5]
特殊:除了xx以外[^xx]^必须写在正则的开头
4.预定义字符集:意思是对常用字符集的简写
\\w 一位字母数字或_ [0-9a-zA-Z_]
\\d 一位数字 [0-9] digital(数位)
\\s 一位空字符 一切看不见的字符:空格,Tab ,回车..
. 一位任意字符
5.一个预定义字符集仅匹配一位字符,仅用于规定字符的内容
量词:专门规定一位字符集出现次数的规则,量词都是用于一个字符集只有默认修辞相邻的前一个字符集,量词需要用在字符后面
<1、有明确数量的边界
字符集min,max 规定字符集出现最少min次,最多max次
字符集min, 最少出现min次
字符集n 必须出现n次
<2、没有明确数量的边界
字符集? 可有可无,最多出现一次
字符集* 可有可无,多了不限
字符集+ 1, 至少出现一个,多了不限
仅修辞相邻的前一个字符集
选择和分组
分组:将多个字符集组成一组 可以让一个量词修饰多个字符集
ex: (字符集)
选择:"或" 匹配任意一个规则即可
ex: 规则1|规则2 (微|w(ei)?)(信|x(in)?)
<3.匹配指定位置的字符
字符串的开头 ^ ex: ^\\s+ 开头的空字符
字符串结尾 $ ex: \\s+$ 结尾的空字符
单词边界 \\b ex: \\b no \\b
匹配no这个单词,但是前和后可以用标点或者空格和其他字符隔开
<4.手机号
(\\+86|0086)? +86或0086
\\s* 空字符,可有可无,多了不限制
1
[3457869] 3,4,5,6,7,8,9中挑一个
\\d9 9位数字
(\\+86|0086)?\\s*1[3456789]\\d9 正则中间不要加空格,容易被解析成规则 +前加上\\否则会被解析成量词
邮箱
数字/字母或_ 一次以上 \\w+
@
字母或数字 2位以上 [0-9a-zA-Z]2,
(. 和 (字母或数字) 2-3位) 1-2次
6.例句语法:
<1.var str = ‘good good study,day day up‘;
// 01234567890123456789012
var i = str.indexOf(‘day‘,i+1);
console .log(i);
//var i = str.indexOf("关键词",fromi); 从指定位置开始找下一个
<2.str = "no zuo no die no can no bibi ";
//循环变量
var i = -1;
//反复:通过改变i的值,查找str中包含弄关键词的位置
while((i = str.indexOf("no",i+1))!=-1)
console.log(‘在位置‘+i+"发现敏感词");
//var i = str.lastIndexOf("关键词",fromi) 用法和indexOf相同,但是从后往前查找
console.log(str.lastIndexOf(‘no‘));
// 问题:只能找一个关键词
// 解决:正则表达式
//2.判断字符串中是否包含了符合规范的敏感词
//var i = str.seach(/正则/)
//在str中查找一个符合正则表达式要求的关键词的位置
//返回值:找到的关键词的下标,如果找不到返回-1
//发送消息是,只要包括了‘微信‘就不让发送
7.查找匹配
1.验证:检查字符串是否完全符合正则表达式的要求!
var bool = reg.test(待检测的字符串)
输入六位数的密码 只要是验证,reg必须前加^后加$ 从头到尾的完整的匹配
var reg = /^\\d6$/;
while(!reg.test(prompt(‘请输入密码:‘)))
alert(‘密码格式不符!请输入六位数的密码!‘);
document.write(‘<h1>验证通过</h1>‘);
查找 关键词;第四种情况, 4.既找到所有关键词的内容也找到每个关键词的位置?
var arr = reg.exec(待检测的字符串)
返回值:本次找到的一个关键词及其位置
arr[0]:关键词的内容
如果正则中有分组
arr[n]:自动保存第n个分组匹配的字内容
arr["index"]:当前关键词的位置 简写 arr.index
如果 没找到,返回null
每一次查找后,都将reg.lastIndex属性(下一次开始位置) 修改为位置index+关键词长度,相当于当前关键词继续向后找
8.正则创建
RegExp对象中封装了,正则表达式,并且提供使用正则的API查找和验证
利用正则查找关键词的四种情况 利用正则执行验证
var reg = /正则/ig; 正则是固定不变
1.创建固定不变的正则表达式 创建的是一个对象 直接量
var str = "no can n/o say , you can you up";
var reg = /n\\ /o/g; 在双斜杠中写的是内容遵循的是正则的语法,因此想要使用/需要加上\\作为转义
9.正则的贪婪及懒惰
贪婪模式:正则表达式默认匹配最长的符合正则条件的子字符串
.* .+
;懒惰模式:仅匹配最短的符合条件的子字符串
贪婪改懒惰 2种方法
1. .* .+ =====> .*? .+?
2. [^xxx]*
例如:
var html = ‘<link rel="stylesheet" href="RegExp.html"><body><ul><li><a class="active" href="http://www.bailiabn.com">百里半</a></li><li><a href="http://www.baidu.com" target="_blank">百度</a></li></ul></body>‘;
正则的分组是为精确的获取我想要匹配的内容
reg = /<a\\s+[^>]*?href="([^"]*?)"/gi;
如果匹配出来的内容只关心字内容,不关心完整的内容
while(reg.exec(html) != null)
console.log(RegExp.$1);
RegExp.$n 可获取本次找到的第n个分组的子内容
以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章