难以启齿的正则
JS正则表达式
既然是正则那就先从字符串操作开始
search(‘xxx’)
- 字符串操作返回查找字符串的位置
- 没找到返回 -1
1 | var str = 'abcdef'; |
substring()
口诀「包头不包尾」(左闭右开)
获取子字符串
1 | var str = 'abcdef'; |
charAt()
获取某个字符
1 | var str = 'abcdef'; |
split()
分割字符串,获取数组
1 | var str = '13-14-aaa-xxx'; |
为什么要学正则
需求查找字符串里的数字
1 | var str = '12 fff 87 er334 233 -=-=fa80'; |
if 正则
1 | var str = '12 fff 87 er334 233 -=-=fa80'; |
什么是正则
一串英文、数字 @ - 一串英文、各种文 「计算机」是看不懂的
计算机只懂 0/1 、逻辑、程序 —->规则、模式
- 强大的字符串匹配工具
- 一种正常人类很难懂得文字
- RegExp对象
正则就是干
- 两种风格迥异的使用方式
需求1 看第一个例子查找字母 ‘a’
1 | // js风格 |
另一种风格
1 | // perl风格 |
需求2 查找忽略大小写的字母 ‘b’
忽略大小写之「i」(ignore)
1 | // js风格 |
另一种风格
1 | // perl风格 |
search 和 match 的区别
search是查找匹配规则的字符(只找一次,找到匹配规则的第一个索引返回)
match 是返回所有匹配规则的东西都取出来
1 | var reg = /\d/; |
match返回3是因为 计算机很蠢,你只告诉它找数字,没告诉它找几个
但是,正则天生懒惰想变勤奋你得加「g」
「g」global
那你就给我勤奋一点!
1 | var reg = /\d/g; |
怎么出来的都是个位的数字?
因为你只告诉计算机取一个数字
量词(个数)
1 | var reg = /\d+/g; |
replace()
把’a’替换成 0
1 | //仅第一个a被替换了 |
- replace 配合 字符串去替换字符是非常弱爆的
- replace只有配合正则才能发挥真正的作用
1 | var str = 'abc aaa erv'; |
但是正则有全局匹配啊
1 | var reg2 = /a/g; |
replace之敏感词过滤
1 | var reg = /零售|中国|淘宝/g; |
元字符(方括号)
需求匹配 以a或b或c开头+ ‘pc’结尾的字符
1 | [abc]pc |
1 | var str = 'apc xpc ppc bpc spc tpc'; |
元字符之范围
- 任意字符 [abc]
- 范围 [a-z] [0-9]
- 排除 [^a]
1 | [a-z] a到z的字母 |
转义字符
1 | . 点----任意字符 |
偷小说之替换html标签
1 | var str = `<p id="p1">fdsadfdssafas</p> |
量词:个数
1 | {n} 正好出现n次 |
需求1 电话号码 (除去区号010/022/0537)
1 | [1-9]\d{7} |
需求2 qq号(qq号没有0开头的) 5-11位
1 | [1-9]\d{4,10} |
需求3 固定电话 010-87490623-86
1 | 010-87490623-86 |
为什么不推荐用「*」
因为匹配数字的时候0次也算在内
1 | var str = '12 fff 85 er552 333 -=-=fa22'; |
行首 「^」行尾「$」
test()
校验是否符合正则返回 true/false
校验邮箱
1 | var str = 'trustfor@sina.cn' |