【js】正则
复习字符串操作
search 查找
substring 获取子字符串
charAt 获取某个字符
split 分割字符串,获得数组
<script> var str="abcdef"; var str2='12-56-aaa-89'; alert(str.search('e'));//弹出4 如果没找到返回-1 alert(str.substring(2,5));//第一个参数是起点第二个是终点 类似Python的 alert(str.charAt(3));//d var arr=str2.split('-');//split用来做切分的 把字符串切分成数组 alert(arr);//12,56,aaa,89 </script>
从一堆字符串里提取数字串 //思路 //目的 把数字从一串字符串中拎出来 var str='12 fff 87 er334 233 ++++fa80'; var tmp=0; var arr=[]; for(var i=0;i<str.length;i++){ if(str.charAt(i)>='0' && str.charAt(i)<=9){ tmp+=str.charAt(i); } else{ if(tmp){ arr.push(tmp); tmp=''; } } } if(tmp){ arr.push(tmp); tmp=''; } alert(arr);//012,87,334,233,80 改用正则:alert(str.match(/\d+/g));
search 查找
substring 获取子字符串
charAt 获取某个字符
split 分割字符串,获得数组
关于正则符合忽略大小写
<script> //var re=new RegExp('a','i');//参数:字符串 js风格 i:ignore忽略字符串大小写的意思 var re=/a/i;//风格 var str='Abdhce'; alert(str.search(re));//弹出0; </script>
转义 \d; <script> //找出第一个出现的数字 var str='adsf 43 23 vcxzxcv'; var re=/\d/; alert(str.search(re));//弹出5 (位置) </script>
<script> //match 把所有匹配的东西全都提取出来 var str='asdf 34 655 cvs33'; var re= /\d+/g; //g:global全局匹配 找出所有的 alert(str.match(re));//3,4,6,5,5,3,3切片弹出了 因为\d代表了你要几个数字 //改成 /\d+/g; +量词:若干:34,655,33 </script>
<script> //replace必须配合正则来使用 var str='abc aaa erw'; var re=/a/g; alert(str.replace(re,'0'));//意在把所有的a替换成0 g:全局匹配 </script>
敏感词过滤 <script> //敏感词过滤 就是把某些词替换成***而已 window.onload=function (){ var oTxt1=document.getElementById('txt1'); var oTxt2=document.getElementById('txt2'); var oBtn=document.getElementById('btn1'); oBtn.onclick=function (){ var re=/北京|淘宝|百度/g; oTxt2.value=oTxt1.value.replace(re,"***"); } }//|或的意思 </script> </head> <body> <textarea id="txt1" rows="10" cols="40"/></textarea> <br> <input id="btn1" type="button" value="过滤"/> <br> <textarea id="txt2" rows="10" cols="40"/></textarea> </body>
<script> //元字符 [abc][]是或的意思 就是abc随便出现哪一个都行 var str='apc 214 322 %%& SPC tpc bpc 2434 cpc'; var re=/[abc]pc+/g; alert(str.match(re));//apc,bpc,cpc //[a-z] [0-9] 就是表示范围了 所以这个\d==[0-9] //[^a-z]表示除了的意思 就是除了a到z其余类型的全都可以[区分大小写鸭] //[^a-z0-9]表示除了小写英文和数字 </script> <script> //偷小说 找到章节 右键点击源代码 // 过滤HTML标签 标签的规则就是一对<>中间任意字符都可以除了尖括号本身 .表示任意字符 window.onload=function (){ var oTxt1=document.getElementById('txt1'); var oTxt2=document.getElementById('txt2'); var oBtn=document.getElementById('btn1'); oBtn.onclick=function (){ var re=/<[^<>]+>/g; oTxt2.value=oTxt1.value.replace(re,""); } } </script> </head> <body> <textarea id="txt1" rows="10" cols="40" /></textarea> <input id="btn1" type="button" value="过滤" /> <textarea id="txt2" rows="10" cols="40" /></textarea> </body>
转义字符
\d 表示数字 [0-9]
\w 表示英文数字下划线 [a-z0-p_]
\s 空白字符
.
\D [^0-9]:除了0-9 \W \S
量词:个数
{n} 正好出现n次 \d{8} 8个数字 [1-9]\d{7}:第一位是1-9其余7位随意(电话号码啊啥的)
{n,m} 最少n次 最多m次 eg:qq号 [1-9]\d{4,10} 第一位非0其余四位或者10位
{n,}最少n次 最多不限
+ 等价{1,}//最少一次
?等价{0,1}
* {0,}
eg:固定电话 010-87496698 前面的010是可以省略的 所以就 (0\d{2,3}-)?[1-9]\d{7} ():分组
校验邮箱、 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>diyici</title> <script> //校验邮箱 一串英文,数字,下划线 @ 一串英文,数字 . 一串英文 // \w+ @ [a-z0-9]+ \. [a-z]+ 一串:+ .有任意字符的意思所以转义\. window.onload=function (){ var oTxt=document.getElementById('txt1'); var oBtn=document.getElementById('btn1'); oBtn.onclick=function (){ //var re=/\w+@[a-z0-9]\.[a-z]+/i;//加i是因为邮箱不需要区分大小写 //加上^$: var re=/^\w+@[a-z0-9]+\.[a-z]+$/i;//意思就是这个字符串开头结尾已锁门中间只能是那些东西不能有别的 if(re.test(oTxt.value)){ /*专门来检验此re是否符合正则要求的 但是是字符串只要有一部分符合要求就认为他符合要求:申请K1076986799@qq.COM这是不符合要求的 但是test会返回true ^:排除/行首[字符串的开头] $行尾 */ alert("合法的"); } else{ alert('写错了')//不合法返回false } } } </script> </head> <body> <input type="text" id="txt1"> <input type="button" id="btn1" value="校验"/> </body> </html>