正则表达式——火星文
之前在学习到正则表达式的时候,真的看了两秒直接就跳过了,真的看到都怕,来自地球的我表示真的看不懂这个传说中的火星文,但是,要想学习到更多的知识,我深知逃避是解决不了问题的,于是我硬着头皮尝试的去理解它,今天简单记录下来,以供以后来鄙视
正则表达是其实就是规则表达式,就是我们要找的条件翻译成计算机能读懂的语言
创建正则对象有两种方式:
js风格——new RegExp("a","i");
perl风格——/a/i;
语法与释义:
基础语法 "^([]{})([]{})([]{})$"
正则字符串 = "开始([包含内容]{长度})([包含内容]{长度})([包含内容]{长度})结束"
匹配邮箱的例子
//邮箱规则拆分:开始一串数字、字母、下划线@一串数字、英文.一串英文(最少2,最多4)结束 var re=/^\w+@[a-z0-9]+\.[a-z]{2,4}$/g;
其中g代表全局匹配,i代表不区分大小写;
常用运算符与表达式:
^ 开始
() 域段
[] 包含,默认是一个字符长度
[^] 不包含,默认是一个字符长度
{n,m} 匹配长度
. 任何单个字符(\. 字符点)
| 或
\ 转义
$ 结尾
[A-Z] 26个大写字母
[a-z] 26个小写字母
[0-9] 0至9数字
^ 开始
() 域段
[] 包含,默认是一个字符长度
[^] 不包含,默认是一个字符长度
{n,m} 匹配长度
. 任何单个字符(\. 字符点)
| 或
\ 转义
$ 结尾
[A-Z] 26个大写字母
[a-z] 26个小写字母
[0-9] 0至9数字
[A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字
, 分割
, 分割
去掉首尾空格例子:--考察开头和结束字符使用
var re=/^\s+|\s$/g;
匹配是否存在中文:
var re=/[\u4e00-\u9fa5]/;
理解常用的正则表达式:
[abc] a或者b或者c
等价:
等价是等同于的意思,表示同样的功能,用不同符号来书写。
{n,m}表示范围,至少出现n次,最多m次
?,*,+,\d,\w 都是等价字符
量词:
?等价于匹配长度{0,1} //零次或1次
*等价于匹配长度{0,} //任意次
+等价于匹配长度{1,} //一次或任意次
?等价于匹配长度{0,1} //零次或1次
*等价于匹配长度{0,} //任意次
+等价于匹配长度{1,} //一次或任意次
\d等价于[0-9]
\D等价于[^0-9]
\w等价于[A-Za-z_0-9]
\w等价于[A-Za-z_0-9]
\W等价于[^A-Za-z_0-9]
\b匹配一个单词边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”
\B匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”
运用正则,写完美版getByClass()
function getByClass(oParent,aClass){ var aEle=oParent.getElementsByTagName('*'); var aResult=[]; var re=new RegExp('\\b'+sClass+'\\b','i'); for(var i=0;i<aEle.length;i++){ if(re.test(aEle[i].className)){ aResult.push(aEle[i]); } } return aResult; }
真正的稳定,不是你在一家单位有饭吃,而是你足够牛逼,不论走到哪里都有饭吃