正则表达式以及实际应用

 

正则表达式

正则表达式:规则表达式,主要用于规定字符串的出现规则

通过正则指定特定字符串出现的规则,去匹配某些字符串,如果匹配成功,就可以得到结果

最简单的正则表达式语法

关键字正文:abc

正则对象 生成正则表达式

语法糖:

var reg = /abc/;

构造函数
var reg = new RegExp("abc");

test方法 检测一个字符串是否符合这个规则,如果符合返回true,否则返回false

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
var str = '那天我去了她家,我说我草你家真大';
//声明一个正则
var reg = /我cao/;
var res = reg.test(str);
alert(res);
</script>
</body>
</html>

元字符 预定义字符集 正则表达式 自己定义好的,代表特殊含义的字符

.  任意字符  换行除外
\ 转义     \.普通的点
\d 数字
\w 数字 字母 下划线
\s 空字符 空格
\D 非数字
\W 非 数字字母下划线
\S 非空

限定符 用于修饰元字符出现的次数 量词

  • * : 前一个内容重复至少 0 次,也就是可以出现 0 ~ 正无穷

  • + : 前一个内容重复至少 1 次,也就是可以出现 1 ~ 正无穷

  • ? : 前一个内容重复 0 或者 1 次,也就是可以出现 0 ~ 1

  • {n} : 前一个内容重复 n 次,也就是必须出现 n

  • {n,} : 前一个内容至少出现 n 次,也就是出现 n ~ 正无穷

  • {n,m} : 前一个内容至少出现 n 次至多出现 m 次,也就是出现 n ~ m

注意:用来修饰 元字符 修饰时前面一个元字符

边界符

需要完整匹配 一个字符 从开头到结束 每一位规则 数量规则

^匹配开头

$匹配结束

    //必须是 小写字母a开头 总共是 4-8位数字字母_
var reg = /^\w{3,7}$/;
var a = 's74935';
var b= 'a23845675493821';
var c= 'a23456';
alert(reg.test(a)); //false
alert(reg.test(b));//false
alert(reg.test(c));//true

其他符号

[] 备选字符集 匹配一位的 可以在中括号写 这一位可能出现的多个字符

如果这一位的备选字符是连续的 比如 a-z A-Z 0-9可以用 -连接

//必须是 大写字母A-Z开头 总共是 4-8位数字字母_
var reg = /^[A-Z]\w{3,7}$/;
var a = "A28248";
var b = "a34546";
var c = "F468354695879689";
alert(reg.test(a)); //true
alert(reg.test(b)); //false
alert(reg.test(c)); //false
//必须是 大写字母A-Z或者_或者1-7开头 总共是 4-8位数字字母_
var reg = /^[A-Z_1-7我]\w{3,7}$/; 首字母可以是A-Z或者_或者1-7或者我

() 分组 将几位作为一个完整的规则

需求:有一个字符串 结束 必须是三位 abc出现一次 或者abc没有

使用场景:多位字符需要被修饰符修饰 (量词),需要加()

var reg = /^\w{3,7}(abc)?$/

| 选择 或

字符串结尾 可以是 a或b

            var reg =/^\w[acd457]a|c$/;
var str = 'c';
alert(reg.test(str));//true
错误原因:js 将 | 两边作为两个选择 规则就变成了 可以是 \w[acd457]a 或者 c
怎么解决:用()分组解决
var reg =/^\w[acd457](a|c)$/;
注意:选择 一般都会伴随着分组

备选字符集取反 [^] 取反

[^abc] 除了abc的任意字符

关键字

i   ignore 忽略大小写
/[a-z]/i;   a-zA-Z
g   global 全局匹配 不会只找到第一个复合条件的字符就立即返回,继续查找
/\w/g
注意:
关键字是用来修饰 正则对象的 写在正则的后面

如何匹配字符串开头和结尾的空格

var  reg = /^\s*|\s*$/;

字符串相关api

1,字符串查找

search

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
var str = '那天我去了她家,我说我草,你家草真大';
var reg = /草/g;
var res = str.search(reg);
console.log(res); //11 g没有用
</script>
</body>
</html>
总结:
对比indexOf()
优点:支持正则 indexOf不支持正则
缺点:不能全局查找,找到第一个返回条件的字符就返回所在下标,找不到返回-1

2,字符串替换

replace

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
var str = '今天天气还可以,我的心情挺好,我想飞';
var reg = /我/g;
var newStr = str.replace(reg,"*");
console.log(newStr);
//今天天气还可以,*的心情挺好,*想飞
</script>
</body>
</html>
注意:支持全局查找,支持忽略大小写

删除开头结尾的空格
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="text" id="txt"/>
<button>获取值</button>
<script>
var txt = document.getElementById("txt");
var btn = document.querySelector('button');
btn.onclick = function(){
var value = txt.value.replace(/^\s*|\s*$/g,"");
console.log(value);
}
</script>
</body>
</html>

3,查找 match

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
var str = '你要adw飞的更高,摔的dwdw更狠';
// var reg = /\w/g;
// var res = str.match(reg);
// console.log(res);
var reg = /我/;
var res = str.match(reg);
console.log(res);//null
</script>
</body>
</html>
总结:
支持全局 支持忽略大小写
如果有复合条件字符,返回一个数组,所有的符合条件的结果
如果没有符合条件的字符,返回null
缺点:得不到结果的下标

 可以百度   正则大全   有很多写好的正则   可以直接使用;

猜你喜欢

转载自www.cnblogs.com/cxf1214/p/11432570.html