正则表达式
什么是正则表达式?
- 强大的字符串匹配处理工具。
- 是一种正常人很难读懂的文字。
复习字符串操作:
- search(' 字符串 ') 查找 : 返回某一字符串第一次出现的下标; 没有的话返回 -1
- subatring (1,4) 获取字符串: 获取[1,4)的字符串。 之后一个参数时,第二个默认为字符串长度。
- charAt(2) 字符串 : 返回下坐标为2的字符。
- split(‘ - ’) : 将一个字符串按照'-'切成"几片" 。 之后生成并返回一个字符串数组,每个单位为一个字符串。
为什么用正则?
简化对于字符串的操作!
正则表达式:规则表达式
--- 把一组规则表达给计算机,让计算机来执行。
例如:
这些我们可以一眼识别出来这些,因为我们有一定的规则认知;对于计算机,同样如此。
正则能做什么?
操作字符串。--- 唯一能做的。
例如:
var str='abcdef';
var re=new RegExp('a','i');
alert(re.text(str));
// re 为忽略大小写的,查找是否存在字符'a'的一个正则。 简写: var re=/a/i; (一般都使用简写,称作perl风格)
正则与search:
if(window.navigator.userAgent.search(/firefox/i)!=-1){//证明找到了。}
search(正则);
正则与match: //匹配,匹配出与符合正则要求的字符串。
1 var str="asd123 123 asd 2131"; 2 var re=/\d/g; 3 alert(str.match(re));
// 这里的g是全局(global)的意思,这里会找出全部的; 否则只给出第一个。
// var re=/\d+/g; + 在这里是量词:是管它前面那个的,这里指多个数字。
// var re=/\d\d/g; 会出现两个一起的数字。 三个的话只出现前两个。
正则与replace:(用来替换)
str.replace('a','T'); // 将字符串str中的a替换成T。但这里只会替换一个。
---使用正则: 加上一个 g 即可,会替换全部的'a'。
应用:敏感词过滤等。
var re=/你们|我们|他们/g 。
字符类:
var re=/1[abc]2/;
// == var re =/1a2| 1b2 | 1c2/;
- []这里就是或者的意思。 --- [123 456] :或者1或者2或者3或者 或者4...
- [1-9] 1~9中的或者 // [0-9a-z]字母或者数字。
- [^a] : 表示除了a之外的其它所有东西。
--- 可以组合起来用。
应用:偷小说
过滤网页小说后台代码上的 标签。
var re=/<.+>/g;
// .代表任意,+代表多个任意。
// 但正则有一个特性,贪婪: 会找一个尽量大的符合的内容。
改成:
var re=/<[^<>]+>/ ;
// 含义: <后除了<>的任意多个字符,之后还有一个>的部分。
正则//中可写的东西:
转义字符:
- \d digital
- \w word [a-z0-9_] //英文,数字,下划线
- \s space 空白: 包括空格,制表符等。
- . 代表任意
还有大写的:
- \D 除了\d的所有
- \W 除了\w的所有
- \S 除了\s的所有
量词: {n,m} //最少n次,最多m次、
什么是量词?
出现的次数
- {n,m}
- {n,} 最少n次,最多不限
- {,m} 最少不限,最多m次
- {n} 正好n次
- +号: 相当于 {1,} 最少出现一次
- *号: 不建议使用,相当于 {0,} 可以不出现,也可以出现任意次,但容易引发问题。
- ?号: {0,1} 可以出现,也可以不出现,但出现只可以出现一次
比如:QQ的规则:
- var re=/[1-9]\d{4,10}/; 第一位为1-9,之后是4-10个任意数字。
更多实例:
校验邮箱:
规则: 一串字母、数字、下划线 @ 一串英文或数字 .一串英文(这里有长度限制)
定义正则: var re=/\w+@[0-9a-z]+\.[a-z]{2,4}/; //这里注意应为.本身有含义,这里需要转义
但是,会出现问题:
我们会发现: 你好nihao@163.com 也是对的,(前面加了汉字)
再介绍一个东西:
^与$ 这里的^不出现再[]中, 其分别代表行首和行尾。
改变正则为:
var re=/^\w+@[0-9a-z]+\.[a-z]{2,4}$/ ;
即可。
//补充1:行首和行尾字符也可以用来去掉行首尾的空格。(中间的空格保留)
var re=/^\s+/;
var re1=/\s+$/;
//var re=/^\s+ | \s+$/g;;
//之后使用字符串.replace(re,‘’)。 //将符合正则的替换为空
//补充2:匹配中文: 汉字在计算机中采用utf-8编码
[\u4e00-u9fa5]; \u代表utf8编码, 4e00是第一个汉字的utf-8编码。
//补充3:单词边界:\b
这里因为需要使用变量,所以使用回最开始的定义正则方式:
定义: var re=new RegExp('\\b'+sClass+'\\b','i');
总结:
- 字符串操作包括哪些? search substring charAt split
- 什么是正则表达式?如何创建正则对象? 处理字符串的规则。 new 或者 //
- 正则有几种选项? i 和 g ,一个是忽略大小写,一个是全局匹配。 当然不仅这两个。
- search、match、replace是做什么用的? 寻找,匹配,替换。
- 字符类[],包含哪几种情况? [abc]任意一个 [a-z]a到z [^a]除了a
- 正则有哪些转义字符? . 任意字符 \d \w \s 数字,字母数字下划线,所有的空白字符
- 什么是量词?一个东西出现的次数: {n,m} ... *任意次 ?0或1次 +1次到任意次
- 举几个正则表达式的例子,比如:邮箱、中文、QQ号等。