正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
下面通过实例代码介绍下正则表达式使用
//一个数据类型,记录文本规则,一些事先定义好的一些特殊字符,对字符串的过滤逻辑
//表单验证账号长度,字母或数字组合,高级搜索
//特点,不仅js有;极简的方式操作字符串;灵活,功能强大
// 正则表达式大全
1
2
|
var patt1=new RegExp( "e" );
document.write(patt1. test ( "The best things in life are free" ));
|
/*是否带有小数*/
1
2
3
4
|
function isDecimal(strValue ) {
var objRegExp= /^\d+\.\d+$/;
return objRegExp.test(strValue);
}
|
/*校验是否中文名称组成 */
1
2
3
4
|
function ischina(str) {
var reg=/^[\u4E00-\u9FA5]{2,4}$/; /*定义验证表达式*/
return reg.test(str); /*进行验证*/
}
|
/*校验是否全由8位数字组成 */
1
2
3
4
5
6
|
function isStudentNo(str) {
var reg=/^[0-9]{8}$/; /*定义验证表达式*/
return reg.test(str); /*进行验证*/
}
var arr = new Array();
var reg = new RegExp(/\d/);
|
//表示匹配数字
1
2
|
reg = reg.test( "jndwjdw" );
console.log(reg);
|
//正则对象。test(需要验证的字符串)
//字面量声明
var reg2 = /男|女/;
//有没有其中一个
1
2
3
|
var reg = reg2.test( "呦呦哟偶女" );
console.log(reg);
console.log(/男|女/.test( "哈迪哈迪哈女" ));
|
//语法
//.test();正则表达式检测某段字符串
//预定义类
1
2
3
4
5
6
7
|
console.log(/./.test( "\r" )); //除了回车和换行外的任意字符
console.log(/\d/.test( "123" )); //检测是不是数字
console.log(/\D/.test( "sh" )); //非数字字符,只要不是数字就true,只要有一个就是true
console.log(/\s/.test( "\r" )); //只要有不可见就true\r\n\f\h\两个空字符串拼接是false
console.log(/\S/.test( "ah7" )); //只要有可见字符就对
console.log(/\w/.test( "b-8" )); //所有字母数字和下短线_,只要有就是对短线
console.log(/\W/.test(( "bg8-@" ))); //true//只要有非单词字符就是对
|
//自定义类,没有\
1
2
3
4
5
6
|
console.log(/d/.test( "123" )); //检测这段里面有不有d这个字 //
console.log(/yskma/.test( "yskmama" )); //true//检测这段字符串包不包含yskma,不能断开不能中间穿插别的
console.log(/yskmama/.test( "ysk" )); //false //或和优先级
console.log(/ysk|mama/.test( "ysk" )); //true
console.log(/ys(k|m)a/.test( "ysk" )); //false//检测这段字符串中有不有yska或者ysma
console.log(/ys(k|m)a/.test( "yskma" )); //false//检测这段字符串中有不有yska或者ysma
|
//简单类[]代表一个字符
1
2
3
|
console.log(/[abc]/.test( "gbhigf" )); //true//只要出现abc中 的任意一个就是对
console.log(/y[abc]z/.test( "yaz" )); //true//包含yz,并选一个a
console.log(/y[abc]z/.test( "yabcz" )); //false//abc只能要一个
|
//负向类[^ ]取反
1
2
|
console.log(/[^abc]/.test( "a" )); //false//除了括号外的内容才是对,有就是错,不能有括号内的
console.log(/[^abc]/.test( "af" )); //true//除了括号外的内容才是对,有就是错,不能有括号内的
|
//范围类
console.log(/[0-9]/.test("b8jg")); //true
//组合类,组合起来就是组合类,自定义类
//^边界,以。。开头
//$以。。结尾
//^bc$严格匹配
//.回车和换行以外的
1
2
3
4
5
6
7
|
console.log(/^6a/.test( "6akjjkak" )); //true
console.log(/^6.a/.test( "6akjjkak" )); //false
console.log(/[.]{8}/.test( "6akjjkak" )); //false,当前"."就是代表字符串".",此处没有8个".",所以false;
console.log(/ac$/.test( "6akjjkakac" )); //true//ac结尾
console.log(/^6a$/.test( "6a" )); //true
console.log(/^\d$/.test( "9" )); //true//只能出现一次
console.log(/^abc\d$/.test( "abc7" )); //true//只能出现一次
|
//量词:?0||1次;+前面的>=1次;*>=0次
1
2
3
4
5
6
|
console.log(/^colo*r$/.test( "color" )); //true
console.log(/^colo+r$/.test( "color" )); //true
console.log(/^colo?r$/.test( "color" )); //true
console.log(/^colo?r$/.test( "colr" )); //true
console.log(/^colo?r$/.test( "coloor" )); //false
console.log(/^colo*r$/.test( "colooooooor" )); //true
|
//量词,{}前面出现的:。。{n}n次;{n,}>=n;{n,m}...>=n..<=m
//*{0,}..?{0,1}....+{1,}
//括号总结{}次数;[]一个;()一组,分组
//转Unicode:escape("你好")-----Ununicod("u%hkkblpp%^Vhk")
//所有汉字在一到与之间
1
2
|
console.log(/[\u4e00-\u9fa5]/.test( "哈" ));
console.log(/[\u4e00-\u9fa5]{3}/.test( "哈你好" ));
|
//字符串替换
1
2
3
|
var str = "abcde" ;
console.log(str.replace( "a" , "b" )); //bbcde
console.log(str.replace(/a/g, "b" )); //bbcde
|
//换成句号
1
2
3
|
var str = "a,b,c,d,e" ;
var str2 = str.replace(/,/g, "." ); //g是替换全部
console.log(str2);
|
//修改成绩
1
2
3
4
5
6
7
8
9
10
11
12
13
|
var str = "a,b,c,70,90" ;
var str2 = str.replace(/\d{1,}/g, "100" ); //g是替换全部
console.log(str2); //吧,.都改成。
var str = "a,b,c,70,90." ;
var str2 = str.replace(/[ , , .]/g, "。" ); //g是替换全部
console.log(str2);
var stra = " abc "
function MyTirm(stra) {
var str3 = stra.replace(/^\s+|\s+$/g, "" ); //去掉前后空格空格换成空字符串
return str3;
}
var str2 = MyTirm(stra);
console.log( "==" + str2 + "==" );
|
//想要的字符提取出来,提取邮箱 //来不及写
//math,提取符合要求的元素
//分组提取,提取邮箱的每一个部分
RegExp.$1, RegExp.$2, RegExp.$3
//检索字符indexof();lastindexof();返回下标
1
2
3
|
var str = "张三:1000,李四:5000,王五:8000。" ;
var arr = str.match(/\d+/g);
console.log(arr); //math返回数组,提取元素
|
//exec只取一个,math可以取全部的
//正则对象:test,exec........字符串:math,spilt,search,
//用某个字符分隔字符串
1
2
3
|
var str = "123123@xx.com,fangfang@valuedopinions.cn 286669312@qq.com 2、emailenglish@emailenglish.englishtown.com 286669312@qq.com..." ;
var arr = str.match(/\w+@\w+(\.\w+)+/g);
console.log(arr);
|
//6 分组提取
1
2
3
4
5
6
7
8
9
10
|
//提取email中的每一部分
var str = "123123@xx.com" ;
var reg = /(\w+)@(\w+)\.(\w+)(\.\w+)?/;
var array = str.match(reg); //获取分组的数据 ()是分组
console.log(RegExp.$1); //123123
console.log(RegExp.$2); //xx
console.log(RegExp.$3); //com //分组练习
var str = "5=a, 6=b, 7=c" ;
str = str.replace(/(\d)=(\w)/g, "$2====$1" ); //吧567分3组,吧abc分3组,2组在前面,1组在后面
console.log(str);
|
//i 忽略大小写
//g 全局匹配
//控制字符串相关方法
//1、正则对象的 test exec
//2、字符串的 replace search match split
//用法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
console.log(/\d/.test( "123" ));
console.log(/[\u4e00-\u9fa5]{3}/.test( "哈你好" ));
//除了.test和search方法能直接执行,math,replace,split,exec都需要数组接收返回值
var str = "abc100,ccc200,ddd300" ;
var arr = /\d+/.exec(str);
console.log(arr + "这儿" ); //100//只能匹配一项,可以用在分组匹配
var arr = str.match(/\d+/g);
console.log(arr);
var str = "abc100ccc200ddd300" ;
var arr = str.split(/\d+/);
console.log(arr);
var str = "哈哈哈哈,100分" ; //检索里面数字出现的下标
console.log(str.search(/\d+/));
var str = "abcdebfg" ;
var strNew = str.replace( "b" , "d" );
console.log(strNew);
console.log(str);
var v = 2
new RegExp( "^\\d+" + v + "$" ).test(12) //true
|
总结
以上所述是小编给大家介绍的正则表达式使用示例详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
原文链接:https://www.cnblogs.com/chenluqing/archive/2019/05/09/10837998.html