<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
text-align: center;
}
</style>
</head>
<body>
<div>
<h1 >正则表达式的创建</h1>
<p>请按F12查看结果</p>
</div>
<!--
用途:
1.模式验证:检测手机号、身份证号等是否符合规范
2.匹配读取:将满足规则的部分读取出来,如邮箱地址
3.匹配替换:将满足规则的部分替换为指定字符串
只能匹配第一个满足的字符串
原字符串并没有变化,只是返回了一个新字符串
语法:
1.创建对象
(1)对象形式:var reg = new RegExp("正则表达式")当正则表达式中有"/"那么就使用这种
(2)直接量形式:var reg = /正则表达式/一般是这种方式
-->
<!--模式验证-->
<script>
// 创建一个最简单的正则表达式对象
var reg = /o/;
var reg1 = /Love/; // 创建一个字符串对象作为目标字符串
var str = 'Hello World!';
var str2 = 'I Love ZWJ!';
console.log("我喜欢你:"+reg1.test(str2)); // 调用正则表达式对象的test()方法验证目标字符串是否满足我们指定的这个模式,返回结果true
console.log("字符串中是否包含'o'="+reg.test(str));
</script> <!--匹配读取-->
<script>
// 在目标字符串中查找匹配的字符,返回匹配结果组成的数组
/*
match() 方法将检索字符串 String Object,
以找到一个或多个与 regexp 匹配的文本。
这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。
如果 regexp 没有标志 g,
那么 match() 方法就只能在 stringObject 中执行一次匹配。
如果没有找到任何匹配的文本, match() 将返回 null。
否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息
*/
var resultArr = str.match(reg);
// 数组长度为1
console.log("resultArr.length="+resultArr.length);
// 数组内容是o
console.log("resultArr[0]="+resultArr[0]);
</script> <!--匹配替换-->
<script>
var newStr = str.replace(reg,'@');
// 只有第一个o被替换了,说明我们这个正则表达式只能匹配第一个满足的字符串
console.log("str.replace(reg)="+newStr);//Hell@ World!
// 原字符串并没有变化,只是返回了一个新字符串
console.log("str="+str);//str=Hello World!
</script>
<!--全文查找:
如果不使用g对正则表达式对象进行修饰,
则使用正则表达式进行查找时,仅返回第一个匹配;
使用g后,返回所有匹配-->
<script>
// 目标字符串
var targetStr = 'Hello World!'; // 没有使用全局匹配的正则表达式
var reg = /[A-Z]/; // 使用了全局匹配的正则表达式
//var reg = /[A-Z]/g; // 获取全部匹配
var resultArr = targetStr.match(reg);
// 数组长度为1
console.log("resultArr.length="+resultArr.length); // 遍历数组,发现只能得到'H'
for(var i = 0; i < resultArr.length; i++){
console.log("resultArr["+i+"]="+resultArr[i]);
}
</script> <!--忽略大小写-->
<script>
//目标字符串
var targetStr = 'Hello WORLD!'; //没有使用忽略大小写的正则表达式
var reg = /o/g;
//获取全部匹配
var resultArr = targetStr.match(reg);
//数组长度为1
console.log("resultArr.length="+resultArr.length);
//遍历数组,仅得到'o'
for(var i = 0; i < resultArr.length; i++){
console.log("resultArr["+i+"]="+resultArr[i]);
}
</script>
<script>
//目标字符串
var targetStr = 'Hello WORLD!'; //使用了忽略大小写的正则表达式
var reg = /o/gi;
//获取全部匹配
var resultArr = targetStr.match(reg);
//数组长度为2
console.log("resultArr.length="+resultArr.length);
//遍历数组,得到'o'和'O'
for(var i = 0; i < resultArr.length; i++){
console.log("resultArr["+i+"]="+resultArr[i]);
}
</script> <!--多行查找 不使用多行查找模式,目标字符串中不管有没有换行符都会被当作一行。-->
<script>
//目标字符串1
var targetStr01 = 'Hello\nWorld!';
//目标字符串2
var targetStr02 = 'Hello'; //匹配以'Hello'结尾的正则表达式,使用了多行匹配
var reg = /Hello$/m;
console.log(reg.test(targetStr01));//true console.log(reg.test(targetStr02));//true
</script> <!--元字符
被赋予特殊含义的字符 不能被直接当做普通字符使用。
如果要匹配元字符本身,需要对元字符进行转义,
转义的方式是在元字符前面加上“\”,例如:\^
-->
<script>
var str = 'one two three four';
// 匹配全部空格
var reg = /\s/g;
// 将空格替换为@
var newStr = str.replace(reg,'@'); // one@two@three@four
console.log("newStr="+newStr);
</script>
<script>
var str = '今年是2014年';
// 匹配至少一个数字
//匹配加号(+)之前的正则表达式1次或多次。
var reg = /\d+/g;
str = str.replace(reg,'abcd');
console.log('str='+str); // 今年是abcd年
</script>
<script>
var str01 = 'I love Java';
var str02 = 'Java love me';
// 匹配以Java开头
var reg = /^Java/g;
console.log('reg.test(str01)='+reg.test(str01)); // flase
console.log("<br />");
console.log('reg.test(str02)='+reg.test(str02)); // true
</script>
<script>
var str01 = 'I love Java';
var str02 = 'Java love me';
// 匹配以Java结尾
var reg = /Java$/g;
console.log('reg.test(str01)='+reg.test(str01)); // true
console.log("<br />");
console.log('reg.test(str02)='+reg.test(str02)); // flase
</script>
<!-- 字符集合-->
<script>
var str01 = 'Hello World';
var str02 = 'I am Tom';
//匹配abc中的任何一个
var reg = /[abc]/g;
console.log('reg.test(str01)='+reg.test(str01));//flase
console.log('reg.test(str02)='+reg.test(str02));//true
</script>
<!-- 出现次数 {n} 出现n次 {n,m} 出现n到m次-->
<script>
console.log("/[a]{3}/.test('aa')="+/[a]{3}/g.test('aa')); // flase
console.log("/[a]{3}/.test('aaa')="+/[a]{3}/g.test('aaa')); // true
console.log("/[a]{3}/.test('aaaa')="+/[a]{3}/g.test('aaaa')); // true
</script>
<!-- 在正则表达式中表达『或者』使用符号:| -->
<script>
// 目标字符串
var str01 = 'Hello World!';
var str02 = 'I love Java';
// 匹配'World'或'Java'
var reg = /World|Java/g;
console.log("str01.match(reg)[0]="+str01.match(reg)[0]);//World
console.log("str02.match(reg)[0]="+str02.match(reg)[0]);//Java
</script>
<!-- 常用的
需求 正则表达式
用户名 /^\[a-zA-Z\_][a-zA-Z_\-0-9]{5,9}$/
密码 /^[a-zA-Z0-9_\-\@\#\&\*]{6,12}$/
前后空格 /^\s+\|\s+$/g
电子邮箱 /^[a-zA-Z0-9_\.-]+@([a-zA-Z0-9-]+[\.]{1})+[a-zA-Z]+$/
-->
</body>
</html>