js正则表达式学习
//几种字符串操作:
var str = 'abcdef'; alert(str.search('b')); //弹出1;返回的是b在str中的位置;如果找不到返回-1; alert(str.substring(2,5)); //弹出cde;不包括结束位置; alert(str.substring(1)); //弹出bcdef,从开始位置一直截取到结束位置; alert(str.charAt(3)); //弹出d,返回的是第3个位置的字符;
var str = '12 fff 87 er334 233 -=-=-=fa80'; alert(str.match(/\d+/g)); //返回字符串数组: 12 87 334 233 80 /* 正则表达式的两种风格 */ var re = new RegExp('a','i'); var re = /a/i;
//找下面字符串中出现的第一个数字: var str = 'asdf 23 23 zxcacxzczxc'; var re = /\d/; console.log(str.search(re)); //5 找出第一个数字的位置
match用法:
//关于match: //match: 把所有匹配的东西,全都提取出来;以数组的形式 var str = 'asdf 34 656 vsd33'; var re = /\d/; var re2 = /\d/g; //g global 找到全部 var re3 = /\d+/g; alert(str.match(re)); //弹出3 alert(str.match(re2)); //弹出3,4,6,5,6,3,3 因为只告诉了计算机找一个数字 alert(str.match(re3)); //弹出34,656,33
replace用法:
//把所有的a都替换成数字0 var str = 'abc aaa erw'; var re = /a/g; alert(str.replace('a', '0')); //弹出0bc aaa erw; alert(str.replace(re, '0')); //弹出0bc 000 erw;
replace小例子-敏感词过滤:
<body> <textarea id='txt1' cols="40" rows="5"></textarea><br> <input id="btn1" type="button" value="过滤"/><br> <textarea id='txt2' cols="40" rows="5"></textarea><br> </body> <script type="text/javascript"> //敏感词过滤 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>
图:
方括号:
var str = 'apc fpc dpc xpc gpc rpc spc ppc'; var re = /[apx]pc/g; alert(str.match(re)); //弹出apc xpc ppc
偷小说的小例子--过滤HTML标签
html标签规则:<除了<>外任意个字符>
<script type="text/javascript"> //过滤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>
图:
例1:校验电话号码:
如电话号码: 010-87496698-86: 区号和分机号都是可有可无的;电话开始一位不能是0,假设电话为8位数字; 假设分机号最多5位 (0\d{2,3}-)?[1-9]\d{7}(-\d{1,5})? 括号就是分组起来;
例2:校验邮箱:
<body> <input type="text" id='txt1'> <input id="btn1" type="button" value="校验"></input> </body> <script type="text/javascript"> //校验邮箱: window.onload=function(){ var oTxt1 = document.getElementById("txt1"); var oBtn = document.getElementById("btn1"); oBtn.onclick=function(){ //从字符串的开头和结尾,只能出现:\w+@[a-z0-9]+\.[a-z]+ //整个字符串都会校验,而不仅仅是校验一部分 var re = /^\w+@[a-z0-9]+\.[a-z]+$/i; //test方法: //检验oTxt1.value这个字符串是否符合正则re的规则,如果符合返回true //test 字符串一部分符合要求,true if(re.test(oTxt1.value)){ alert("合法邮箱"); }else{ alert("非法邮箱"); } } } </script>
量词:
量词:个数 + 若干(多少都可以,最少1次),等同于{1,} {n} 正好出现n次 {n, m} 最少n次,最多m次 (n,} 最少n次,最多不限 ? 可有可无,相当于{0, 1} * 0次或多次,相当于{0,} (慎用,容易出问题,要考虑好)
方括号:
方括号 [abc] a或b或c,任选一个即可 [abc]pc 则apc、bpc、cpc都行; [a-z] 匹配a-z字母 [0-9] 匹配数字 [^a-z] 匹配除了a-z的字母外; [^a-z0-9] 匹配除了英文字母和数字之外的东西
转义:
转义: \d 匹配数字 [0-9] . 任意字符 (慎用,很容易出问题,用了.很可能是没考虑清楚) \w 英文、数字、下划线 [a-z0-9_] \s 空白字符 代表所有的空格,包含tab、回车、换行 \D 除了数字 [^0-9] \W 除了英文数字下划线 [^a-z0-9_] \S 除了空白字符
行首行尾:
行首行尾: ^ ^不出现在[]里面,代表行首--即字符串的开头 $ 行尾,即字符串结尾;
js正则 贪婪的特性:
它会去匹配尽可能长的字符串,越长越好;
候选(也就是所说的“或”)
re = /^a|bc$/;//将匹配开始位置的a或结束位置的bc str ="add"; alert(re.test(str));//true re = /^(a|bc)$/;//将匹配a或bc str ="bc"; alert(re.test(str));//true
js元字符
( [ { \ ^ $ | ) ? * + .
元字符是正则表达式的一部分,当我们要匹配正则表达式本身时,必须对这些元字符转义