es6语法 正则

正则 规则
正则表达式 规则表达式
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$/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容