正则表达式基础(1)
-
复习字符串操作
-
search 查找 -> 首次出现位置,返回索引值 && 不存在返回 -1
-
substring 获取子字符串 -> 按索引取,取头不取尾,返回字符串
-
charAt 获取某个字符 -> 按索引取返回字符(串) && 索引不存在的返回空字符串
-
split 分割字符串,获得数组 -> 按分隔符截取,返回字符串内容的数组
正则表达式基础(2)
-
什么是正则表达式
-
什么叫“正则”
-
规则、模式
-
强大的字符串匹配工具
-
是一种正常人类很难读懂的文字
-
RegExp对象
-
JS风格——new RegExp(“a”, “i”)
-
perl风格——/a/i
字符串与正则配合(1)
-
search
-
字符串搜索
-
返回出现的位置
-
var str = 'abcdef' alert(str.search('b')); === alert(str.search(/b/)); -> 1
-
忽略大小写:i——ignore
-
var str = 'aBcdef' alert(str.search(/b/i)); -> 1
-
判断浏览器类型
-
e.g. 简单校验浏览器类型
1 <script> 2 // alert(window.navigator.userAgent)// 浏览器信息 3 if(window.navigator.userAgent.search(/firefox/i) != -1) { 4 alert('ff') 5 }else if (window.navigator.userAgent.search(/chrome/i) != -1){ 6 alert('chrome') 7 }else if(window.navigator.userAgent.search(/msie 9/i) != -1){ 8 alert('IE9') 9 } 10 //.... 11 </script>
-
match
-
获取匹配的项目
-
量词:+
-
量词变化:\d、\d\d和\d+
-
全局匹配:g——global
例子:找出所有数字
1 var str = 'sdd 233 sd 333 3 sddw33 4589 0' 2 var re = /\d/g 3 4 alert(str.match(re) ->
结果:
字符串与正则配合(2)
-
replace
-
替换所有匹配
-
返回替换后的字符串
-
var str = 'abAcdef' alert(str.replace(/a/gi,'T')) ->'TbTcdef'
-
例子:敏感词过滤
1 <textarea id="area1" cols="30" rows="10"></textarea> 2 <button id="btn">屏蔽敏感词</button> 3 <textarea id="area2" cols="30" rows="10"></textarea>
1 <script> 2 var oAr1 = document.getElementById('area1') 3 var oAr2 = document.getElementById('area2') 4 var oBtn = document.getElementById('btn') 5 6 var re = /我们|你们|他们/g 7 oBtn.onclick = function() { 8 oAr2.value = oAr1.value.replace(re, '***') 9 } 10 </script>
字符类(1)
-
任意字符
-
[abc]
-
例子:o[usb]t——obt、ost、out ; 看仔细 /[a,b]/ === /a|,|b/; /[23 4]/ === /2|3| |4/
-
re = /o[usb]t/; === re = /out|ost|obt/
-
范围
-
[a-z]、[0-9]
-
例子:id[0-9]——id0、id5
-
排除
-
[^a]
-
例子:o[^0-9]t——oat、o?t、o t
-
字符类(2)
-
组合
-
[a-z0-9A-Z]
-
实例:偷小说
-
e.g. var re =/\<[^<>]+\>/g === re = /<[^<>]+>/g
1 <textarea id="area1" cols="30" rows="10"></textarea> 2 <button id="btn">转换</button> 3 <textarea id="area2" cols="30" rows="10"></textarea>
1 <script> 2 var oAr1 = document.getElementById('area1') 3 var oAr2 = document.getElementById('area2') 4 var oBtn = document.getElementById('btn') 5 6 var re = /<[^<>]+>/g 7 oBtn.onclick = function() { 8 oAr2.value = oAr1.value.replace(re, '') 9 } 10 </script>
-
过滤HTML标签
-
自定义innerText方法
-
转义字符
-
.(点)——任意字符 => \. 表示 普通的 .
-
\d [0-9]、
-
\w [a-z0-9_]、
-
\s 空白字符 如 空格 制表符等
-
e.g. 去除空白字符 re= /\s+/g
-
\D [^0-9]、\W [^a-z0-9_]、\S
量词
-
什么是量词
-
出现的次数
-
{n,m},至少出现n次,最多m次
-
例子:查找QQ号
-
常用量词
-
{n,} 至少n次
-
{n,m } 最少n次,最多m次
-
{n, } 最少n次,最多不限
-
{,m} 最少不限,最多m次
-
{n} 正好n次
-
e.g. 匹配正确的QQ号
1 <script> 2 var str = '我的QQ号是643609709,你的是2332129845' 3 var re = /[1-9]\d{4,10}/ //表示如qq号那样5-11位的纯数字串 4 5 alert(str.match(re)) 6 </script>
-
* 任意次 {0,} 表示可以不出现,不建议使用,会引发一些小问题
-
? 零次或一次 {0,1} 表示可以出现或不出现,出现也只是出现一次
-
+ 一次或任意次, 实际是{1,}的简写
e.g. 邮箱正则匹配 注意:一般做校验类的, 都要加行首行尾来限定全部内容
1 <input id="text" type="text" placeholder="邮箱" /> 2 <button type="submit">校验</button>
1 <script> 2 // 一串字母、数字、下划线 @ 一串英文、数字 . 一串英文(长度是2-4) 3 // \w+ @ [a-z0-9]+ \. [a-z]{2-4} 4 // \w+@[a-z0-9]+\.[a-z]{2-4} 5 6 var oText = document.getElementById('text') 7 var oBtn = document.getElementsByTagName('button')[0] 8 //var re = /\w+@[a-z0-9]+\.[a-z]{2,4}/ //存在bug 需要限定在行首行尾 9 var re = /^\w+@[a-z0-9]+\.[a-z]{2,4}$/ 10 oBtn.onclick = function() { 11 if (re.test(oText.value)) { 12 alert('邮箱正确') 13 } else { 14 oText.value = '' 15 alert('邮箱错误,请重新输入') 16 } 17 } 18 </script>
e.g. 删除行首行尾多余空格 注意:正则加g匹配查找到的全部内容
// 行首空格 行尾空格
// ^\s+ \s+$
1 var re = /^\s+|\s+$/ 2 alert(str.replace(re,''))
对比结果:
-
高级表单校验
-
校验邮箱
-
行首行尾 ^\w+@[a-z0-9]+\.[a-z]{2,4}$
-
去除空格:^\s*|\s*$ g
-
匹配中文:[\u4e00-\u9fa5]
-
-
完美版getByClass(oParent, sClass)
单词边界:\b
1 var re = new ReqExp('\\b'+sClass +'\\b', 'i')