正则表达式的理念:
1. 关于字符串的一些方法
2. 操作字符串,不用正则完全可以,如果用正则的话就会:方便并且效率-极高
3.正则也叫规则表达式
例子--1:找数字:
var str = 'sjd23 2 l289k 232432432 j 9'; 期望结果: 23 2 289 232432432 9
(1):传统做法:循环判断
(2):正则做法:str.match(/\d+/g)使用正则时要先new一个正则出来:
正则的使用方法:
new RegExp();RegExp:正则单词简写,
完整写法:Regular Expression new RegExp('规则');
正则里string两个方法:
(1):str.search(正则); //在字符串中查找,找到匹配表达式的第一个字符串的位置
indexOf 找不到,返回 -1
(2):str.match(正则);//在字符串中用 正则表达式来匹配,返回的是符合规则的字符串数组
找不到,返回 null
使用正则找字母的几种写法:
new RegExp('k');new RegExp(规则)--区分大小写
new RegExp(‘规则’ ,‘选项’)--i是指选项并且不去区分大小写 :
new RegExp('正则','选项');
new RegExp(‘规则’ ,‘选项’) 的简写:/规则/选项;
正则的转义:
\ 表示转义符
\ d 表示数字
\n 表示换行
\w 表示字母 数字和下划线()
\s 空白 空格
\D 表示数字
\W 表示非字母 数字 下滑线
\S 表示非空白 空格
\. 表示统配符的意思也叫任意字符
例子:str.match(/\d+/g) 在正则中:\d --- 表示数字
正则特性:
1、懒只会找一次,后面的都不管
g :正则的一个选项,表示: 全局(查找,匹配)
i:忽略大小写
2、笨、蠢 找数字的时候,把数字都拆分开了,不是找到一个就完事了
3、贪: 一组中有多少字符都不分开
使用正则测试敏感词过滤的小例子:
str.replace() ---如果说没有正则,replace()就是个废物
str.replace('原字符串','目标字符串');
str.replace(正则|字符串,'目标字符串');
正则里或的表示方法:
JavaScript里: 双杠表示或|| 在正则中单个杠表示| 或的意思
str.replace(正则|字符串,字符串|函数);
正则里的修饰符:
(1) ^:表示行首
(2) $:表示行尾
正则里m表示多行模式:当前行的开头和结尾 单行模式:^行首、$行尾 表示就是整个字符串的开头和结尾
选项:m ---多行模式 muti - line
选项: gi gm *选项
i,g,m使用时,可以直接写在一起
replace() 可以连写
正则里的量词:
{n} n个
{n,m} 最少n个,最多m个
{n,} 最少n个,最多不限
{1,} 最少1个,最多不限
{0,1} 最少0个,最多1个 -- 有无
{0,} 最少0个,最多不限 +
{1,} 最少个,最多不限 ?
{0,1} 最少0个,最多1个
* {0,} 最少0个,最多不限-- 不推荐使用
正则里 []中括号:
1)或 [ab] -- a 或 b
[1a2d] --1或a或2或d
[18] -- 1或8 // 'ad18sd 1kds 8sd '
2)范围
[0-9] 从0到9
[a-z] 小写字母
[A-Z] 大写字母
[a-z0-9A-Z] 3)排除^
[^0-9]表示: 除了数字
str.search(expr)str.match(expr)expr.test(str); //测试 看 表达式和字符串是否能匹配上,如果能返回true,否则false
正则的应用:
匹配 固定电话:
思路: 82323238 5727323 010-88234582 0476-5329878
如果有-,前面是3或4位数字
如果有-,后面是7或8位数字
电话号一共不超过12位数字
如果有区号,第一位是0,可以没有区号和区号可有可无
1:有区号:第一位是0:后面是
2:电话部分:第一位不是0 6-7位数字
使用 .test 方法,本身有一些问题, 不太严谨 如果要用test,请一定要加上 /^ $/
正则里点 . 和 | 使用或 一定要加括号
步骤:
1)用你的语言来翻译一下规则
2)分段来考虑 固定电话:区号电话
3)翻译成代码
固定电话正则代码:
var regx = /^(0[1-9]\d{1,2}\-)?[1-9]\d{6,7}$/;手机号:
var regx = /^1[345789]\d{9}$/;邮箱:
var regx = /^\w{1,30}@[0-9a-z\-]{2,20}(\.[a-z1-9]{2,3}){1,2}$/;年龄:
var regx = /^(1[89])|([2-9]\d)|(100)$/;>