正则规则
/**
* 对象:匹配字符串
* 作用:
* 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