JS学习日记--正则基础语法

一、正则表达式

正则表达式是由普通字符及特殊字符组成的对字符串进行过滤的逻辑公式

创建方式

  • 字符量的方式:
    var reg = /abc/;

  • 构造函数
    var reg = new RegExp(“abc”);

二、正则表达式方法

方法名作用返回值
test检测是否有符合表达式规则的子串有返回true,否则返回false
match检索指定的值这些值组成的数组
search查找符合规则的子串第一个匹配成功的位置
split分割返回数组
replace替换返回替换后的值
exec将匹配成功的放到数组里匹配成功的值,没有成功则返回null

注:exec如果要全部输出,需要多次调用,一次只能输出一个

		<script type="text/javascript">
			/*创建方法*/
			var reg=/abc/;//1.字面量的方式
			var  reg=new RegExp("abc");//2.构造函数
			/*方法*/
			 //test方法 用来检测是否有符合表达式规则的子串,有返回true,无返回false
			var str="aabcd";
			console.log(reg.test(str));
			//修饰符 g  i 
			//g表示全局匹配
			//i不区分大小写
		//match方法 检索指定的值 返回值也是这些指定的值组成的数组
			var reg=/abc/ig;
			var str="aAbcabc";
			console.log(str.match(reg));
			//seach方法,查找符合规则的子串的位置,只返回第一个匹配的位置
			var reg=/abc/;
			var str="12abc4";
			console.log(str.search(reg));
			//split  分割 返回数组
			var reg=/ /;
			var str="good good study";
			console.log(str.split(reg));
			//replace 替换
			var reg=/aaa/ig;
			var str="aaa aaa study";
			console.log(str.replace(reg,"good"));
			//exe方法,将匹配成功的方法放到数组里,如果没有匹配成功,返回null
			//如果要全部输出 则需要多次调用,一次只能输出一个
			var reg=/good/g;
			var str="good good study";
			console.log(reg.exec(str));
			console.log(reg.exec(str));
			console.log(reg.exec(str));
		</script>
输出:
true
Array(2)
2
Array(3)
good good study
Array(1)
Array(1)
nul

三、正则表达式中的特殊字符

字符作用
.代表除了换行符外的所有单个字符
*重复多次匹配(0-n)
+至少一次重复匹配
进行零次或者一次匹配
[ ]表示可以匹配到的范围
\w数字字母下划线
\W非数字字母下划线
\d表示数字
\D非数字
\s匹配空格
{m,n}至少匹配m次,最多匹配n次
/^匹配开始
$/匹配结束
()分组 将内容作为一个整体进行匹配
$1,$2代表分组的元素
		<script type="text/javascript">
			//. 除了换行符外的所有单个字符
			var reg=/g..d/gi;
			var str="goodg--dg/-d";
			console.log(reg.test(str),str.match(reg));
			//* 重复多次匹配,匹配任意次(0-n),只作用于前一个字符
			var reg=/go*d/gi;
			var str="goodgogod";
			console.log(reg.test(str),str.match(reg));
			//+ 至少有一次重复匹配
			var reg=/go+d/gi;
			var str="goodgdgodgoooood";
			console.log(reg.test(str),str.match(reg));
			//? 进行零次或者一次匹配
			var reg=/go?d/gi;
			var str="gdgodgood";
			console.log(reg.test(str),str.match(reg));
			//[] 表示可以匹配到的范围
			var reg=/[a-z]+/gi;
			var str="asjfij";
			console.log(reg.test(str),str.match(reg));
			//\w 代表数字字母下划线 等同于[0-9a-zA-Z_] W\非数字字母下划线
			var reg=/\w+/ig;
			var str="s4989_*";
			console.log(reg.test(str),str.match(reg));
			//\d 表示数字  \D非数字
			var reg=/\d+/gi;
			var str="1234s4";
			console.log(reg.test(str),str.match(reg));
			//\s 匹配空格
			var reg=/\s+/gi;
			var str="good good      study";
			console.log(str.replace(reg,""));
			//{m,n} 至少匹配m次,至多匹配n次
			var reg=/go{3,6}d/ig;
			var str="goooodgoodgoooooood";
			console.log(reg.test(str),str.match(reg));
			// /^ 匹配开始 $/ 匹配结束
			var reg=/^g.*g$/gi;
			var str="goodgd";
			console.log(reg.test(str),str.match(reg));
			// | 或
			var reg=/google|baidu|yahoo/gi;
			var str="www.baidu.com";
			console.log(reg.test(str),str.match(reg));
			// () 分组 将内容作为一个整体进行匹配
			var reg=/(good){2,3}/gi
			var str="goodgoodagood"
			console.log(reg.test(str),str.match(reg));
			console.log(RegExp.$1);
			//$1 $2 代表分组的元素
			var reg=/(.*)\s(.*)/;
			var str="taobao baidu";
			console.log(str.replace(reg,"$2 $1"));
		</script>
输出:
true Array(3) 0:"good" 1:"g--d" 2:"g/-d"
true Array(2) 0:"good" 1:"god"
true Array(3) 0:"good" 1:"god" 2:"goooood"
true Array(2) 0:"gd" 1:"god"
true Array(1) 0:"asjfij"
true Array(1) 0:"s4989_"
true Array(2) 0:"1234" 1:"4"
goodgoodstudy
true Array(1) 0:"gooood"
false null
true Array(1) 0:"baidu"
true Array(1) 0:"goodgood"
good
baidu taobao

四、一个小例子

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>用户名规范</title>
		<script type="text/javascript">
			window.onload=function()
			{
				var oInput=document.getElementById("username");
				oInput.onchange=function()
				
				{
					var str=this.value;
					var reg=/^[a-zA-Z_]\w{5,14}$/;
					if(reg.test(str))
					{
						alert("格式正确");
					}else{
						alert("用户名由数字,字母下划线组成的 6-15位字符,且不能以数字开头");
					}
				}
			}
		</script>
	</head>
	<body>
		用户名:<input type="text" id="username" />
		
	</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值