2019.7.31正则

正则表达式Regular(规则) Expression(表达式)
规定一个字符串中字符出现的规律的表达式
[email protected]/cn 1
when 只要使用一个种规则,模糊匹配关键词时
how
1.最简单的正则就是关键词原文
ex: 我 我是 我shi
内容: 我 我是 我shi

2、字符集:规定字符串中某一位字符,备选字符列表 只有一个字符,但是有多重选择字符
语法:[备选字符列表]
每个字符集只能匹配一位字符,且每个字符集中至少匹配一次
ex:[微wv][信x]
匹配到的内容: 微信 wx vx 微x v信 w信
ex:[Qq][Qq]
匹配到的内容:Qq qq QQ qQ
简写:
1.如果备选字符列表是连续的,可用-省略中间字符
一位数字:[0123456789] ==>[0-9]
ex:[0-9] [2-8] [1-1]
内容:0123 567 11111
一位小写字母:[a-z]
一位大写字母:[A-Z]
一位字母:[a-zA-Z]
一位汉字:[\u4e00-\u9fa5]
特殊:除了xx以外[^xx]^必须写在正则的开头
预定义字符集:对常用字符集的简写
\w 一位字母数字或_ [0-9a-zA-Z_]
\d 一位数字 [0-9] digital(数位)
\s 一位空字符 一切看不见的字符:空格,Tab ,回车..
ex:(三个空格) aaa
内容(三个空格) aaa
. 一位任意字符
一个预定义字符集仅匹配一位字符,仅用于规定字符的内容
量词:专门规定一位字符集出现次数的规则,量词都是用于一个字符集只有默认修辞相邻的前一个字符集,量词需要用在字符后面
1、有明确数量的边界
字符集{min,max} 规定字符集出现最少min次,最多max次
ex:
字符集{min,} 最少出现min次
字符集{n} 必须出现n次
2、没有明确数量的边界
字符集? 可有可无,最多出现一次
字符集* 可有可无,多了不限
字符集+ {1,} 至少出现一个,多了不限
仅修辞相邻的前一个字符集
选择和分组
分组:将多个字符集组成一组 可以让一个量词修饰多个字符集
ex: (字符集){}
选择:"或" 匹配任意一个规则即可
ex: 规则1|规则2 (微|w(ei)?)(信|x(in)?)
匹配指定位置
字符串的开头 ^ ex: ^\s+ 开头的空字符
字符串结尾 $ ex: \s+$ 结尾的空字符
单词边界 \b ex: \bno\b 匹配no这个单词,但是前和后可以用标点或者空格和其他字符隔开

手机号
(\+86|0086)? +86或0086
\s* 空字符,可有可无,多了不限制
1
[3457869] 3,4,5,6,7,8,9中挑一个
\d{9} 9位数字
(\+86|0086)?\s*1[3456789]\d{9} 正则中间不要加空格,容易被解析成规则 +前加上\否则会被解析成量词
邮箱
数字/字母或_ 一次以上 \w+
@
字母或数字 2位以上 [0-9a-zA-Z]{2,}
(. 和 (字母或数字) 2-3位) 1-2次

// 检索关键词 查找出字符串中包含的敏感词的位置或者内容 4种
// 1、查找一个固定的关键词出现的位置 只找第一次出现的位置
// var i = str.indexOf("关键词"); 查找的是第一次出现的位置,如果没找到返回-1 省略第二参数,默认从0开始查找
// 关键词严格区分大小写
var str = "good good study , day day up";
// 0123456789012345678901234567
var i = str.indexOf("day");
console.log(i);
//var i = str.indexOf("关键词",fromi); 从指定位置开始找下一个
i = str.indexOf("day",i+1);
console.log(i);

i = str.indexOf("very");
console.log(i);

str = "no zuo no die No can no bibi";
//循环变量
var i = -1;
// 反复:通过给变i的值,查找str中包含no关键词的位置
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.search(/正则/)
// 在str中查找第一个符合正则表达式要求的关键词的位置
// 返回值:找到的关键词的下标,如果找不到返回-1
// 发送消息是,只要包括了 "微信"就不让发送

<ul id="ulname">
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
<li>five</li>
</ul>

<script type="text/javascript">
// 检索关键词 查找出字符串中包含的敏感词的位置或者内容 4种
// 1、查找一个固定的关键词出现的位置 只找第一次出现的位置
// var i = str.indexOf("关键词"); 查找的是第一次出现的位置,如果没找到返回-1 省略第二参数,默认从0开始查找
// 关键词严格区分大小写
var str = "good good study , day day up";
// 0123456789012345678901234567
var i = str.indexOf("day");
console.log(i);//18
//var i = str.indexOf("关键词",fromi); 从指定位置开始找下一个
i = str.indexOf("day",i+1);
console.log(i);//22

i = str.indexOf("very");
console.log(i);//-1没找到

str = "no zuo no die No can no bibi";
//循环变量
var i = -1;
// 反复:通过改变i的值,查找str中包含no关键词的位置
while((i=str.indexOf("no",i+1))!=-1){
console.log(‘在位置‘+i+"发现敏感词");
}
// var i = str.lastIndexOf("关键词",fromi) 用法和indexOf相同,但是从后往前查找
console.log(str.lastIndexOf("no"));
//替换:讲字符串找那个的所有敏感词替换成新的内容,不修改原字符串的权限,要
//用变量接收
var str = ‘no zuo no die no can No bb‘;
//查找:search。在str中查找第一个符合表达式要求的关键字,找到了返回下标,
//没找到返回-1,
console.log(str.search(/no/i));
//match:找到一个内容,保存在一个数组里面。
console.log(str.match(/no/ig));
//replace,替换,ig表示不区分大小写和全局。后面的为所替换的字
str = str.replace(/no/ig,‘bu‘);
console.log(str);

//根据不同类型的敏感词,动态替换不同新值。
//替换 我去 卧槽 我去去
var msg = ‘什么?女神约我去吃饭?卧槽!真的?那我去去就来。‘
msg = msg.replace(/[我卧][槽去][去]?/ig,
//kw为本次找到的关键字,return 根据关键字替换出来的新字
function(kw){
return kw.length == 2?‘**‘:‘***‘;
}
)
console.log(msg)

//删除字符串开头和结尾的空格
var asd = ‘ q w e r ‘;
asd = asd.replace(/^\s+|\s+$/ig,‘‘)
console.log(asd);

//切割:spilt 切割后多个字符串组成数组
var pid = ‘421181199712090432‘;
var chars = pid.split(‘‘);
console.log(chars);
var mail = ‘[email protected]‘;
var arr = mail.split(/@/);
//切割后分为两个数组
var arr1 = arr[0];
var arr2 = arr[1];
console.log(arr,arr1,arr2);

function ulname(){
/*//1.后的ulname元素中html内容 innerHTML,保存到html中
var html = document.getElementById(‘ulname‘).innerHTML;
console.log(html);
//2.删除html开头的空字符<li>和结尾的</li>空字符
html = html.replace(/^\s*<li>|<\/li>\s*$/g,‘‘);
console.log(html);
//3.按照</li>空字符<li>切割html 保存到一个names数组中
var names = html.split(/<\/li>\s*<li>/g);
console.log(names);
//4.对数组名字进行排序
names.sort();
console.log(names);
//5.按照拆分的格式,进行还原
html = ‘<li>‘ + names.join(‘</li><li>‘) + ‘</li>‘;
console.log(html);
//6.将html写入到ulname元素中去
document.getElementById(‘ulname‘).innerHTML = html;*/
document.getElementById(‘ulname‘).innerHTML = ‘<li>‘ + document.getElementById(‘ulname‘).innerHTML.replace(/^\s*<li>|<\/li>\s*$/g,‘‘).split(/<\/li>\s*<li>/g).sort().join(‘</li><li>‘) + ‘</li>‘;
}
ulname()

//将这六行携程一行代码。

原文地址:https://www.cnblogs.com/awei313558147/p/11302403.html

时间: 2024-10-21 15:22:57

2019.7.31正则的相关文章

离线赛 2019.10.31

2019.10.30 \[ Ameiyo \] A: 地精部落 : Dp , 前缀和优化 Dp B: 深入虎穴 : 图,结论题 C: 教义问答手册 : 分治,分块,Dp A 挺简单的一道 Dp ...看 这个博客 . B 其实可以用 dijsktra 做这道题,但是每次用来更新的都是自己的次小值. 因为当你走到当前点时,老虎会让你不能走最小值,所以是用次小值更新. 每次也是拿次小值最小的点出来更新. ll mi[N][2]; struct NODE { int id; ll w; inline

解题报告 smoj 2019初二创新班(2019.3.31)

目录 T1:单人游戏 题目描述 分析 证明:游戏必定存在环 证明:以最短路径到达环必定最优 证明:移动时不可能越过环的结尾 DP实现 代码 T2:赚金币 题目描述 分析 代码 T3:抽奖 题目描述 分析 代码 时间:2019.4.5 比赛网址 T1:单人游戏 题目描述 棋盘由N个格子排成一行,从左到右编号为1到N,每个格子都有一个相关的价值. 最初,棋子位于第1个格子上,当前方向是向右的. 在每个回合中,棋子在当前方向上行走零步或多步,每一步就是走一个格子.然后在下一回合中,棋子的方向反转. 一

2019.8.1正则二

预习 //去除str中的字母 var str = '1sss2aaa3sdsdf4sf5sd622'; str = str.replace(/[a-z]*/g,''); console.log(str); //查找a中出现最多的字符,打印次数 var a = 'aaaavvvvbbbdddbeeeddcccc'; for(var i = 0,result = [];i < a.length;i++){ //在result中有以a[i]为下标的元素,则给元素a[i]+1 if(result[a[i

2019.12.31

今天是2019年的最后一天,从6月开始学习前端到现在,觉得自己知之甚少,绕了很大一个弯,前进了一小步,对我已是意义非凡. 回望这一年,我能记住的事其实很少,这说明我浪费了很多时间在一些意义不大的事上,因为当我看向未来,觉得未来距离遥远,此刻的时间不过是长河中的一栗,便放任自己,这一放任,9102年就过去了. 我记得去年的12月21日也写过这样的东西,当时还定了几个目标来着,现在都忘了,甚至忘记我写在哪里.就算会忘,我还是要有目标的,否则下一年奋力的方向都没有. 我要入职现在实习的这家公司,在20

机械狗的机器学习入门(一)——菜市场。2019/3/31

做一盘好的菜,食材的选用非常重要,接下来我来学习如何在菜市场买菜. 因为有一定的Python基础,所以使用Python作为工具.Python有很多好用的工具,最常见的获取数据的方法就是requests库. import requests requests库有很多用法,获取数据常用的是 requests.get(url) 这样就可以获取指定网页的数据了 import requests r = requests.get(r'http://www.baidu.com') print(r.text) 这

追币项目周报(2019.05.26—2019.05.31)

项目动态1.DeFi联盟联合追币.ZOS举办以DeFi(分布式金融)主题的币圈大型酒会DeFi之夜.2.比特币比萨节的活动福利发放完成:3.追币Lab即将上线. 技术动态前端:1.币币交易移动端页面编写,完成度75%.2.追币主站首页的页面编写,完成度90%.3.网站K线优化. 后台:1.撮合引擎升级服务.2.网站资产估值服务更新.3.风控系统升级.4.EOS节点服务升级. APP:1.Android & iOS 数据统计SDK接入,发布新版. 产品动态:1.追币2.0功能设计.2.接洽第三方客

2019.7.31 Linux 区分格式化报错解决办法

解决方法:执行partprobe 命令 查看是否安装过该命令: 12[[email protected]~]# rpm -q partedpackageparted is not installed 提示没有安装过,则需要安装parted 安装命令:#yum install parted #前提是保证你的虚拟机可以上网,要从网络下载安装包 1[[email protected]~]# yum install parted 安装完成后,再进行查询一次,已经安装成功. [[email protect

2019.7.31

目录 1.进程 2.操作系统的结构 3.操作系统的发展历史 4.内核与GNU/Linux系统的版本问题 5.开源体系 6.Linux的安装与命令简介 1.进程 默认的守护进程(开机时就需要启动) 普通进程(程序都会启动自己的进程) (1)普通进程要依赖于默认进程. (2)大部分普通进程都不能直接通过Sysrem Call去调用硬件资源,它们需要借助库文件才能在系统上正常运行. Windows的库文件一般是 .dll Linux的库文件一般是 .os 交互:Linux操作系统下常见的交互方式为sh

2019.8.31课程设计报告

一.当天完成的任务    划水了一天,导入了module,弄了个百度语音的程序,效果不太行,识别率不怎么高. 贴个代码: public class MainActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getSimpleName(); private Button mOpenSpeechDialogBtn; private Button mOpenSpeechLo