2019.7.31正则

正则表达式Regular(规则) Expression(表达式)
规定一个字符串中字符出现的规律的表达式
xxx@qq.com/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+$ 结尾的空字符
单词边界  ex: no 匹配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 = '313558147@qq.com';
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