正则表达式
正则规则
/** * 对象:匹配字符串 * 作用: * 1.验证表单(匹配,替换,提取) */ /** * 转义\ * \d匹配任一数字字符0-9 * \D匹配非数字字符^\d * * \s 空格 tab 换行 \n \r \t * \S 非空格 * * \w 字符 包括字母数字下划线 * \W非字符 * * \b单词边界(独立单词) 空格 起始位置 结束位置 连词符号\W * */ /** * 定义对象 */ //法1 var x='gg'; var reg1=new RegExp(x); //法2,也可 var o=/abc/; /** * test,检测字符串里有无某个正则规则,返回布尔值 */ var str='helloabcf\"ff123'; console.log('hghjgjg+'+o.test(str) ); var reg2=/\bhello\b/; console.log(reg2.test(str)); /** * match 返回匹配成功的内容数组/null */ // var reg3=/\d{3}/; // console.log(reg3.match(str)); /** * 边界符 ^开头 $结尾 * []限定符 出现任意一个 */ var reg4=/^abc$/;//精确匹配abc!!! var reg5=/abc/;//出现abc var reg6=/[abc]/;//出现a b c任意一个 var reg7=/^[abc]$/;//三选一a||b||c aa false /** * 范围符 - */ var reg8=/^[a-z]$/; /** * 字符组合 */ var reg9=/^[a-zA-Z0-9_]$/;//大小写数字_都可 []多选一 var reg9=/^[^a-zA-Z0-9_]$/;//[]里的^取反 :大小写数字_都不可 /[0-p]{6}/ /** * 量词符 * * :0次或很多次 +:1次或很多次 ?:1次或0次 * {n,m} 最少n个,最多m个 * {n} n次 * {n,} 最少n个,最多不限 * {0,m} */ var reg10=/^a*$/;//0或很多次 var reg11=/^a{3}$/;//3次 //用户名表单验证 var reg12=/^[a-zA-Z0-9_]{6,16}$/;//6-16次大小写/数字/_ var reg13=/^abc{3}$/ ;//abccc var reg14=/^(abc){3}$/ ;//abcabcabc /** * 替换 * g全局匹配 * i忽略大小写 * gi全局匹配忽略大小写 */ var str='andyandred'; // var newstr=str.replace('andy','baby'); var newstr=str.replace(/andy/,'baby'); var str2=str.replace(/激情|gay/g,'**');
正则例子
-
检测某个字符串是否包含指定字符串
let test = /ljj/ /** * test,检测字符串里有无某个正则规则,返回布尔值 */ console.log('ljj test', test.test('iamljj')) // true /(uat)|(localhost)/.test(location.origin) // 是否为测试路径
-
并非全部由数字组成
/[^0-9]/g.test('333ttt') // true
-
全部由数字组成
/[0-9]/g.test('333') ) // true
-
检测是否为测试环境
/80/.test(window.location.href) /(uat)|(localhost)/.test(location.origin) // 是否为测试路径 // (/(\/192.168.253.217)|(\/localhost)/ig).test(location.href)
-
是否含有小数点
/\./g.test('22.dd') // true console.info('22.44', /^\d{1}\.\d{1,2}$/.test(4.33)) //true 检测数字构成:1.2 或者1.22形式 即整数部分含有1位,小数部分含有1位或者两位 \d{1}\.\d{1,2} 或者 ^\d{1}\.\d{1,2}$
-
检测数字构成:1.2 或者1.22形式 即整数部分含有1位,小数部分含有1位或者两位
/\d{1}\.\d{1,2}/.test(4.33) //true /^\d{1}\.\d{1,2}$/.test(4.33)) //true //^匹配输入字符串的开始位置 $匹配输入字符串的结束位置
-
用户名验证
var reg12=/^[a-zA-Z0-9_]{6,16}$/;//6-16次大小写/数字/_ // var inp; // // 回车时 把文本框的值给span // input.onkeyup=function(e){ // // onkeyup 键盘弹起 // if(e.keyCode===13){//回车 asc为13 // // 失去焦点事件 // this.blur(); // inp=input.value; // if(reg12.test(inp)){ // span.innerHTML='用户名合法'; // span.style.color='green'; // }else{ // span.innerHTML='用户名不合法'; // span.style.color='red'; // } // } // }
-
座机号码验证
var input=document.querySelector('input'); var span=document.querySelector('span'); //或者符号| reg1=/^\d{3}-\d{8}|\d{4}-\d{7}$/; reg2=/^\d{3,4}-\d{7,8}$/; //全国座机号码 010-12345678 || 0530-1234567 input.onblur=function(){ if(reg2.test(this.value)){ console.log('合法'); }else{ console.log('不合法'); } }
使用
利用正则分离字符串“123hehe456hehe789”中的数字["123",'456','789']
//使用正则 function getReg(str){ return str.match(/\d+/g); } console.log(getReg(str)); //不适用正则 function getArr(str){ var arr=[]; var r=""; for(var i=0,l=str.length;i<l;i++){ var n=str.charAt(i);//得到当前字符 var as=n.charCodeAt(0);//得到ascII // var as=str.charCodeAt(i); if(as>=48 && as<=57){ r+=n;//字符串拼接 }else if(r){ arr.push(r); r=""; } } if(r) arr.push(r); return arr; } console.log(getArr(str));
敏感词替换
div.innerHTML= text.value.replace(/激情|gay/g,'**');
- [abcde] 匹配abcde之中的任意一个字符
- [a-d] 表示匹配 a 、 b 、 c 、 d 中的任意一个字符,
- . 匹配除\n以外的任何字符(注意元字符是小数点)
- [^fgh] 不与fgh之中的任意一个字符匹配
- \w 匹配大小写英文字符及数字0~9中的任意一个及下画线,相当于[a-zA-Z0-9」
- \W 不匹配大小写英文字符及数字0~9中的任意一个,相当于[^a-zA-Z0-9]
- \s 匹配任何空白字符,包括空格、制表符、换页符等。等价于[\f\n\r\t\v]。 注意:Unicode正则表达式会匹配全角空格符
- \S 匹配任何非空白字符。等价于[^\f\n\r\t\v]
- \d 匹配任何0~9中的单个数字,相当于[0-9]
- \D 不匹配任何0~9中的单个数字,相当于[^0-9]
- \b 匹配一个单词边界,也就是指单词和空格间的位置。
- 例如,er\b可以匹配 never中的er,但不能匹配verb中的er
- \B 匹配非单词边界,er\B能匹配verb中的er,但不能匹配never中的er
- \t 匹配一个制表符。
- \v 匹配一个垂直制表符。
- \f 匹配一个换页符。
- \n 匹配一个换行符。
- \r 匹配一个回车符。
- \cx匹配由x指明的控制字符。例如,cM匹配一个Ctr+M或回车符。x的值必须为A~Z或a~z之一。
- ^ 匹配输入字符串的开始位置。[^]除非在方括号表达式中使用,此时它表示不接受该字符集合。
- $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,则'$'也匹配'\n'或'\r'。(有示例)要匹配'$'字符本身,使用'\$'。
- () 将位于()内的内容当作一个整体。
- []匹配括号中的任何一个字符。例如,“b[an]g” 可以匹配“bag”“bng” 但是不能匹配“big”“bang”。
- []中还可以使用“”来表示某一范围,例如,“[0-9]”表示从 “0”到“9”的所有数字,等价于“a[0123456789]c”,所以“a[0-9]c” 就可以匹配“a0c”“alc”…“a9c”等多个字符串。
- []还可以指定多个区间,例如,[a-zA-Z0-9] 表示任意的字母和数字。
- {} 按{}中的次数进行匹配。
- 例如:正则表达式 A[0-9]{3}能够匹配字符"A"后面跟着正好3个数字字符的串,例如A1234 结果A123。
- {n} n是一个非负整数。匹配确定的n次。
- {n,} n是一个非负整数。至少匹配n次。
- {n,m} :m和n均为非负整数,其中,n≤m。最少匹配n次且最多匹配m次。正则表达式[0-9]{4,6}匹配连续的任意4个、5个或者6个数字
- * 匹配位于*之前的0个或多个字符。
- ? 匹配位于?之前的0个或一个字符。
- + 匹配位于+之前的一个或多个字符。正则表达式9+ 99 99
- \ 表示位于\之后的为转义字符。如'\m'匹配字符'm','\n'匹配换行符。
- | 匹配位于|之前或者之后的字符。 逻辑“或”运算(Or)。
- x|y 匹配x或者y