1.什么是正则表达式?它有什么用?
这里我给出我自己的理解:在实际开发中需要获取大量的数据,而数据的提取不可能是一条一条的(你不可能一条一条去拿到想要的数据吧?),它有其自身的规律在,如身份证一定是十八位数字,电话号码一定是十一位数字,对于这种情况呢,就考虑到能不能设计一种语法来匹配这些想要的数据,从而实现数据的获取呢?因此正则表达式应运而生,正则表达式说白了其实就是一种语法,能够匹配数据的语法罢了,因为它具有的匹配数据的功能,正则表达式还经常被用作数据验证,来验证数据的有效性。当然,它最重要的还是在于数据获取方面(它在Python爬虫中相当重要)
2.正则表达式的语法
正则表达式其实并不难,主要的学习重点在于正则表达式相关修饰符和表达式的使用。而在此我们首先要来熟悉正则表达式的语法,简而言之就是正则表达式它长什么样?
/正则表达式主体/修饰符(可选)
这就是正则表达式的样子了(当然这是我在菜鸟教程上抄的 很奇怪的是我们常用的正则表达式其实并不是长这样)
/^正则表达式主体$/修饰的(可选)
这里希望各位老铁都能马上反应过来这是什么(不会的话建议头打爆)因为之前的数据库有涉及。^ 符号是开始的意思,而 $则是表示语句的结束,这也是JavaScript中正则表达式的常用写法,当然你不写也行,但这是规范,最好写这个。
3.正则表达式的几个常用的方法
查看了几份学习文档,觉得对于正则表达式中的方法描写可能会让基础较差的同学比较混乱,所以这里直接把几个常用的方法汇总起来,掌握其要义即可。
-
search()
文档中对于search()方法的描述是可以检索字符串中指定的子字符串,或则检索与正则表达式相匹配的子字符串,最终返回其位置。这是什么意思呢?这里面一共有两个意思
第一,就是这个方法主要是来检查字符串里有没有你想要的子字符串 比如说 对于字符串“江软吴彦祖”,你想要检查里面是否含有“吴彦祖“ 你就可以:(它会把吴彦祖从第几个位置开始出现返回出来)
var str = "江软吴彦祖"; var n = str.search("吴彦祖"); /*输出结果会为 3 */
(需要注意的就是这里的str在用了search()方法之后就被转化成了正则表达式 当然 不懂可以直接问 或者来问我 也可以看下面)
第二,就是用正则表达式来检索匹配
var str = "江软吴彦祖"; var n = str.search(/^吴彦祖$/); /*输出结果会为 3 */
这个方法其实就是拿来检索大的字符串里面有没有自己想要的子字符串,而这个匹配的过程是用正则表达式或字符串,而如果是字符串最终将也会转成正则表达式。
-
replace()
这个方法其实和上面的方法一个逼样(当然上面写的莫名其妙有点晦涩了好像)简要理解就是上面那个可以来查一下一整个长字符串里有没有你想要的,而这里的replace()就是查一个你想要的内容然后去替换掉它,(这两个方法的底层逻辑一毛一样 只是实现的功能不一样)
//字符串 var str = "江软吴彦祖"; var txt = str.replace("吴彦祖","彭于晏"); //str.replace(内容1,内容2) //正则表达式 var str = "江软吴彦祖"; var txt = str.replace(/^吴彦祖$/,"彭于晏");
怎么说,上面这个例子就是检查str里有没有“吴彦祖” 如果有就换成彭于晏,上面写了用字符串去匹配和用正则表达式去匹配两种情况,和上面那个search一毛一样的(用的时候字符串也是被转化成了正则表达式)
-
test()
这里要划重点 因为这个方法在正则表达式里 常用到就像你上厕所必带纸。
其实JavaScript中又专门表示正则表达式的对象 RegExp 当然有对象就有方法 test()就是这个对象很牛的方法之一。它的作用是可以匹配字符串是否匹配哪个模式 如果匹配就返回 true 否则就是 false,听不懂??说人话 就是我写了一个正则表达式表示要六个数字(/[0-9]{6}^/)然后 如果你写的不符合要求(比如带了个字母) 就会提示是错的,(我不相信你平时没遇到过填邮箱时不符合规范时会显示小红字告诉你错了 这也是正则表达式的功劳)你只有写六个数字才不会报错……
所以我们的数据验证就是靠它
这里写个范例
function isTelCode(str) { var reg= /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/; return reg.test(str); }
这就是验证你输的是不是电话号码的正则表达式使用案例(里面符号不懂的后面给讲解)
-
exec()
这个方法的作用非常简单 就是去查找字符串 然后把查到的数据用数组存起来再输出
又要祭出我的吴彦祖了
var str = "江软吴彦祖" var test = /*吴彦祖^/ test.exec(str)
当然它会输出 “吴彦祖”
4.正则表达式修饰符
修饰符 | 描述 |
---|---|
i | 执行对大小写不敏感的匹配。 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
m | 执行多行匹配。 |
5.正则表达式模式
-
方括号
表达式 描述 [abc] 查找方括号之间的任何字符。 [^abc] 查找任何不在方括号之间的字符。 [0-9] 查找任何从 0 至 9 的数字。 [a-z] 查找任何从小写 a 到小写 z 的字符。 [A-Z] 查找任何从大写 A 到大写 Z 的字符。 [A-z] 查找任何从大写 A 到小写 z 的字符。 [adgk] 查找给定集合内的任何字符。 [^adgk] 查找给定集合外的任何字符。 (red|blue|green) 查找任何指定的选项。 -
元字符
元字符 描述 . 查找单个字符,除了换行和行结束符。 \w 查找数字、字母及下划线。 \W 查找非单词字符。 \d 查找数字。 \D 查找非数字字符。 \s 查找空白字符。 \S 查找非空白字符。 \b 匹配单词边界。 \B 匹配非单词边界。 \0 查找 NULL 字符。 \n 查找换行符。 \f 查找换页符。 \r 查找回车符。 \t 查找制表符。 \v 查找垂直制表符。 \xxx 查找以八进制数 xxx 规定的字符。 \xdd 查找以十六进制数 dd 规定的字符。 \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。 -
量词
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个 n 的字符串。例如,/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"。 |
n* | 匹配任何包含零个或多个 n 的字符串。例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。 |
n? | 匹配任何包含零个或一个 n 的字符串。例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。 |
n{X} | 匹配包含 X 个 n 的序列的字符串。例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的两个 "a",且匹配 "caaandy." 中的前两个 "a"。 |
n{X,} | X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。 |
n{X,Y} | X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的两个 "a",匹配 "caaaaaaandy" 中的前面三个 "a"。注意,当匹配 "caaaaaaandy" 时,即使原始字符串拥有更多的 "a",匹配项也是 "aaa"。 |
n$ | 匹配任何结尾为 n 的字符串。 |
^n | 匹配任何开头为 n 的字符串。 |
?=n | 匹配任何其后紧接指定字符串 n 的字符串。 |
?!n | 匹配任何其后没有紧接指定字符串 n 的字符串。 |
6.其他正则表达式对象的内容
上面讲的就是一般通用的正则表达式的内容了,如果要加深对正则表达式的理解,这里给出了对于正则表达式的其他知识,以加强对于正则表达式的理解与使用。
RegExp 对象方法
方法 | 描述 |
---|---|
compile | 在 1.5 版本中已废弃。 编译正则表达式。 |
exec | 检索字符串中指定的值。返回找到的值,并确定其位置。 |
test | 检索字符串中指定的值。返回 true 或 false。 |
toString | 返回正则表达式的字符串。 |
支持正则表达式的 String 对象的方法
方法 | 描述 | FF | IE |
---|---|---|---|
search | 检索与正则表达式相匹配的值。 | 1 | 4 |
match | 找到一个或多个正则表达式的匹配。 | 1 | 4 |
replace | 替换与正则表达式匹配的子串。 | 1 | 4 |
split | 把字符串分割为字符串数组。 | 1 | 4 |
RegExp 对象属性
属性 | 描述 |
---|---|
constructor | 返回一个函数,该函数是一个创建 RegExp 对象的原型。 |
global | 判断是否设置了 "g" 修饰符 |
ignoreCase | 判断是否设置了 "i" 修饰符 |
lastIndex | 用于规定下次匹配的起始位置 |
multiline | 判断是否设置了 "m" 修饰符 |
source | 返回正则表达式的匹配模式 |
7.案例分析
在学习了正则表达式后 你能否对以下的案例进行分析
当然 希望你可以利用正则表达式编写一个前端程序来完成数据验证功能
你可以进行尝试。 加油
/*是否带有小数*/
function isDecimal(strValue ) {
var objRegExp= /^\d+\.\d+$/;
return objRegExp.test(strValue);
}
/*校验是否中文名称组成 */
function ischina(str) {
var reg=/^[\u4E00-\u9FA5]{2,4}$/; /*定义验证表达式*/
return reg.test(str); /*进行验证*/
}
/*校验是否全由8位数字组成 */
function isStudentNo(str) {
var reg=/^[0-9]{8}$/; /*定义验证表达式*/
return reg.test(str); /*进行验证*/
}
/*校验电话码格式 */
function isTelCode(str) {
var reg= /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;
return reg.test(str);
}
/*校验邮件地址是否合法 */
function IsEmail(str) {
var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
return reg.test(str);
}