正则 规则
正则表达式 规则表达式
Regular Expression
弄一个正则:
new RegExp('表达式',['选项']);
字符串上面有两个方法:
str.search(expr或字符串) //查找,搜索
在str中找,找字符串或表达式expr匹配的内容,如果找到的话,
就返回第1个出现的位置,如果找不到,就返回-1
-- indexOf
var exp = new RegExp('A');
str.search(exp);
str.match(expr或字符串); //匹配
在str中匹配,按expr或字符串来匹配,如果能匹配到,
返回匹配结果的数组,如果匹配不到,返回 null
match方法,通常是配合正则表达式来使用。
正则中的选项:
g global 全局(在全局,在整个字符串中找,如果不加这个选项,那么只匹配一次)
var expr = new RegExp('A','g'); //在整个字符串中匹配 A
i ignore 忽略大小写
new RegExp('a','gi'); //选项可以写在一起,并且没有选后顺序
正则的简写:
不简写: var expr = new RegExp('a','gi');
简写:
/表达式/选项
var expr = /a/gi;
转义:
字符串转义: 换行 \n
\n 换行
\ 显示一个
\\显示两个 \
正则里转义:
\d 数字
正则的特性:
1、懒 g
var str = 'sdfd2332';
str.match(/\d/) --> 2
2、笨
var str = 'dss23 23fs fd2332s';
str.match(/\d/g); --> 2,3,2,3,2,3,3,2
解决笨: 量词
正则里量词:
+ 有一个或多个--- 最少有1个,最多不限
? 有0个或1个 -- 最少有0个,最多1个 —— 有或没有
* 最少0个,最多不限 ——建议尽量少用,因为效率低
var str = 'dss23 23fs fd2332s';
str.match(/\d+/g); --> 23,23,2332
3、贪
var str = 'dss234566778876555678 23fs fd2332s';
str.match(/\d+/g);
正则特性: 懒 笨 贪
敏感词过滤:好
思路:就是把一些预先设定好的词汇,用来代替
字符串的方法:
str.replace('要替换的东西','替换成什么');
let str = '我们国家真好';
str.replace('国家','');
str.replace方法: 只能替换一次
*replace如果不配合正则使用,它就是一个废物
str.replace('要替换的东西或正则','替换成什么');
str.replace('要替换的东西或正则','替换成什么字符串 或 自定义函数');
str.replace('a','b'); //把a替换成b了
str.replace('a',function(s){
//s 表示的就是每次匹配的结果
//返回值 返回的是什么,就替换成什么
});
正则中的或: |
小总结:
new RegExp(表达式,选项);
str.search
str.match
str.replace
懒 (会享受) 笨(萌) 贪(有追求)
正则中的修饰:
^ 行首 匹配的是一行第一个字符的前面
$ 行尾 匹配的是一行最后一个字符的后面
选项:
g 全局
i 忽略大小写
m 多行模式 multi-line
^ 行首
$ 行尾
单行模式:匹配的整个字符串的开头和结尾
多行模式:匹配的一行的开头和结尾
选项:
g i m
/\d/gim
/\d/img
量词:
{n} n个
{n,m} 最少n个,最多m个
{n,} 最少n个,最多不限
{0,1} 最少0个,最多1个—— ?
{0,} 最少0个,最多不限——*
{1,} 最少1个,最多不限——+
+ 最少1个,最多不限
* 最少0个,最多不限
? 最少0个,最多1个
正则中的 []:
1)或的关系
a[bce]c abc acc aec
2)范围 [-]
[0-9] 从0到9
[a-z] 从a到z
[A-Z] 从A到Z
[a-zA-Z] a到z 或者 A到Z (大写字母或小写字母——所有字母)
[12-49] 1或 者2到4或者 9 (1,2,3,4,9)
年龄:满18周岁 18-100岁
18
19
20-99
100
/[18-100]/ ×
把问题拆解,拆解一个一个的简单问题(在这个例子,注意所有的东西都是字符)
要求: 18 19 20 21 ..... 100
解题:
18,19 : 1[89]
20-99: [2-9]\d
100: 100
(1[89]) | ([2-9]\d) | (100)
3)排除 [^]
排除[^xxx] ^ 后面的字符
a[^bc]d 第一个字符是a
第二个字符不能是 b,也不能是c
第三个字符是d
转义:
\d 表示所有数字
\w 字母、数字、下划线
\s 空白 (空格 换行 tab)
\D 非数字
\W 不是 字母、数字、下划线 _
\S 不是空白
\b 单词边界(任何可以分隔单词的东西)
***还有好多自己去看
str.search()
str.match()
正则对象.test('字符串')
var reg = new RegExp('\d+','g');
reg.test('sds232')
--如果不能匹配 ,返回 true
--如果能匹配,返回false
reg.test()
——有一些严重性问题,不太严谨
用test,需要在表达式的前后,加 ^ $
在正则中,如果使用 或(|) ,那么一定要加括号——每个条件和整体都加括号
例1:
验证手机号:
整体11位
第一位:1 1
第二位:3,4,5,7,8 [34578]
剩余部分: \d{9}
1[34578]\d{9}
例2:
座机号
8723678
87232982
010-83232323
0423-3239325
规则:
区号 电话号
区号:
1)第1位 0
2)第2位不是0 [1-9]
2)第3位或第4位是数字 \d{1,2}
4)- 1个
整体上看,可有可无 ?
电话:
第1位不是0 [1-9]
6到7位数字 \d{6,7}
合: (0[1-9]\d{1,2}\-)?[1-9]\d{6,7})
例3:
邮箱:
zhanghaibin@zhinengshe.com
zhang@sina.com.cn
6181742@qq.com
zhang_1234@sohu.com
分为几个部分:
邮箱的名字(@前面):
字母,数字,下划线,最长20位
\w{1,20}
@
域名:
字母,数字,-
[a-zA-Z0-9\-]{1,10}
域名后缀:
.com
.cn
.com.cn
(\.[a-zA-Z]{2,3}){1,2}
合:\w{1,20}@[a-zA-Z0-9\-]{1,10}(\.[a-zA-Z]{2,3}){1,2}
关于字符串的几个小方法:
indexOf lastIndexOf charAt substring toUpperCase toLowerCase split match search
1、去除首尾空格
jquery: $.trim('| s sds fds |')
原生: str.trim() —— 不支持低级浏览器
/^\s+|\s+$/g
2、ES6 判断是否由小串开始
str.startsWith('abc'); 不兼容IE系
自己用正则实现: /^abc/
3、ES6 判断是否由小串结尾
str.endsWith('bd'); 不兼容IE系
自己用正则实现:/bd$/
网友评论