简介:
表达式作用:匹配字符串。
正则表达式的组成:是由元字符或者这是限定符组成的一个式子。
正则表达式的参考文档:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
http://www.runoob.com/jsref/jsref-obj-regexp.html
元字符:
注意:下面列出的仅为最常用的。
. | 表示的是:除了\n以外的任意的一个字符 |
[] | 表示的是范围: [0-9] 表示0-9中的任意一个数字 [a-z]、[A-Z]、[a-zA-Z]、[0-9a-zA-Z] 另一个意思就是把元字符的意思干掉 [.] 就是表示 “.” |
| | 或者。 [0-9] | [a-z] 表示的要么是一个数字,要么是一个小写字母 |
() | 分组:([0-9])([1-5])(A-Z) 三组,从左边开始计算 提升优先级: [0-9] | ([a-z]) | [A-Z] 从([a-z])开始算 |
\d | 任意一个数字 相当于[0-9] |
\D | 任意一个非数字 相当于[^0-9] |
\s | 任意一个空白字符 |
\S | 任意一个非空白字符 |
\w | 非特殊符号 相当于[0-9a-zA-Z_] |
\W | 特殊符号 相当于[^0-9a-zA-Z] |
\b | 单词边界 |
限定符:
* | 表示的是前面的表达式出现了0到多次 [a-z][0-9]* 表示:小写字母中的任意一个 后面是要么是没有数字的,要么是多个数字的 例如:asd123 |
+ | 表示的是:前面的表达式出现了一次到多次 [a-z][9]+: 小写字母一个后面最少一个9,或者多个9 asad9bhjk |
? | 表示的是:前面的表达式出现了0-1次(最少是0,最多是1) [4][a-z]?:“1234” “1234h” “1234kjko5” |
{} | 限定前面的表达式出现的次数 {0,} 前面的表达式出现>=0 相当于:* {1,} 前面的表达式出现>=1 相当于:+ {0,1} 前面的表达式出现>=0 且 =< 1相当于:? {4} 前面的表达式出现4次 |
^ | 表示的是开始,或者是取非(取反) ^[a-z] 以小写字母开头 [^0-9] 取反,非数字 [^a-z] 取反,非小写字母 [^0-9a-zA-Z_] 表示特殊符号 |
$ | 表示的是以什么结束 [0-9][a-z]$ 表示必须以小写字母结尾,而且倒数第二个必须是数字 |
正则表达式案例:
1. 身份证号的匹配
15位或者18位
((1-9)[0-9]{14})|((1-9)[0-9]{16}[0-9xX])
([1-9][0-9]{14})([0-9]{2}[0-9xX])?
2. 座机号码的正则表达式
010-19878523 0431-45612396
[0-9]{3,4}[-][0-9]{8} \d{3,4}[-]\d{8}
3. 邮箱的正则表达式
[0-9a-zA-Z_.-]+[@][0-9a-zA-Z_-]+([.][0-9a-zA-Z]+){1,2}
JS中正则表达式:
修饰符
修饰符用于执行区分大小写和全局匹配:
修饰符 | 描述 |
执行对大小写不敏感的匹配。 | |
执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 | |
m | 执行多行匹配。 |
RegExp 对象方法
方法 | 描述 |
在 1.5 版本中已废弃。 编译正则表达式。 | |
检索字符串中指定的值。返回找到的值,并确定其位置。 | |
检索字符串中指定的值。返回 true 或 false。 | |
返回正则表达式的字符串。 |
支持正则表达式的 String 对象的方法
方法 | 描述 | FF | IE |
检索与正则表达式相匹配的值。 | 1 | 4 | |
找到一个或多个正则表达式的匹配。 | 1 | 4 | |
替换与正则表达式匹配的子串。 | 1 | 4 | |
把字符串分割为字符串数组。 | 1 | 4 |
代码样例:
// 正则表达式中:g 表示的是全局匹配模式
// 正则表达式中:i 表示的忽略大小写
var str1 = "中国移动:10086,中国联通:10010,中国电信:10000";
// 把里面的数字全部提取出来
var array1 = str1.match(/\d{5}/g);
console.log(array1);
// 通过分组提取日
var str2 = "2018-11-11";
var array2 = str2.match(/(\d{4})[-](\d{2})[-](\d{2})/g);
console.log(array2) //["2018-11-11"]
// 使用正则表达式对象.$3
console.log(RegExp.$3); // 11
// 分解邮箱信息
var email = "wwy456@gmail.com.cn";
var emailinfo = email.match(/(^[0-9a-zA-Z_.-]+)[@]([0-9a-zA-Z_-]+)(([.][a-zA-Z]+){1,2}$)/);
console.log(emailinfo);
console.log(RegExp.$1); // 用户名
console.log(RegExp.$2); // gmail
console.log(RegExp.$3); // 域名
/*replace方法*/
var str3=" 剔除所有 的空格 ";
str3 = str3.replace(/\s+/g,"");
console.log(str3);
// 忽略大小写并全局替换
var str4 = "HHhhppHhH";
str4 = str4.replace(/[h]/ig, "S");
console.log(str4); // SSSSppSSS