正则表达式

什么是正则表达式

正则,即规则,模式,是字符串匹配及操作的强大工具。

写法

var re = new RegExp('具体规则'); // 实例化
// 或
var re = /具体规则/; // 简写

常用方法

正则.test(字符串);   // 字符串判断,匹配成功返回 true,匹配失败返回 false。
字符串.search(正则); // 字符串查找,匹配成功返回所匹配到的位置,匹配失败返回 -1。
字符串.match(正则);  // 获取匹配项集合,匹配成功返回数组,匹配失败返回 null。
字符串.replace();   // 替换符合匹配的,返回匹配替换后的字符串。

接下来举例说明这4个的用法。

test 的使用

用于字符串判断,匹配成功返回 true,匹配失败返回 false。

【例子】匹配项为 abc 来匹配字符串

var re = /abc/;
re.test('abcd'); // true
re.test('abdc'); // false

【例子】字符串是否全为数字

var str = '12345A67890';
/\D/.test('abcd'); // true,说明字符串不全为数字。此处利用了转义字符来判断,\D 表示非数字。

search 的使用

用于字符串查找,匹配成功返回所匹配到的位置,匹配失败返回 -1。

【例子】查找字符串 abcdefg

var str = 'abcdefg';
str.search(/c/)   // 2 匹配成功,c 在第2位置上。
str.search(/C/)   // -1 匹配失败,字符串不包含 C。
str.search(/C/i)  // 2 匹配成功,忽略大小写时,字符串包含 c。
str.search(/gf/i) // -1 匹配失败,字符串不包含 gf。

match 的使用

用于从字符串中获取匹配项集合,匹配成功返回数组,匹配失败返回 null。

【例子】找出字符串里的数字

var str = 'a12b34c56d78';
str.match(/\d/);   // [1] 由于正则默认匹配成功后就退出,所以只匹配到了1。
str.match(/\d/g);  // [1,2,3,4,5,6,7,8] 全局匹配,所有的数字都匹配出来了。
str.search(/\d+/g); // [12, 34, 56, 78] “+”是量词,出现1个或多个数字是一个整体。

replace 的使用

用于替换符合匹配的,返回匹配替换后的字符串。

【例子】替换a为A

var str = 'ababaa'
str.replace(/a/, 'A');  // Ababaa 默认匹配成功后就退出,所以匹配结果为 Ababaa。
str.replace(/a/g, 'A'); // AbAbAA 将所有的 a 都替换成 A。

【例子】词语过滤

// 将 “哈”、“嘻”、“呵”替换成“*”号。
// replace 的第2个参数可以为字符串,还可以是回调函数,处理比较复杂的功能。
var str = 'a哈哈b嘻嘻c呵呵';
str.replace(/哈|嘻|呵/g, function (item) {
    var res = '';
    for (var i = 0; i < item.length; i++) {
        res += '*';
    }
    return res;
});
// a**b**c

量词

量词即出现的次数。
常用的量词有:

量词含义
{n, m}至少出现n次,最多出现m次
{n,}至少出现n次,无上限
{n}正好出现n次
*任意次,即{0,}
?0或1次,即{0,1}
+至少出现1次,即{1,}

【例子】字符串判断

var str = 'ab';
/ab+/.test(str);  // true + 表示 b 出现1+次,匹配。
/ac+/.test(str);  // false + 表示 c 出现1+次,不匹配。
/ac*/.test(str);  // true * 表示 c 可以出现0次,匹配。

正则里的[]

[]里字符间是或关系,只要1个字符符合就匹配成功。
【例子】[]里有一个字符匹配成功就成功了

/[abc]/.test('a'); // true [] 含有a
/[abc]/.test('def'); // false [] 不含d、e、f

【例子】范围

var str = 'ab';
/[a-z]/.test(str);  // true [] 里既含 a 又含 b,匹配。
/[A-Z]/.test(str);  // false [] 里既不含 a 又不含 b,不匹配。
/[^A-Z]/.test(str); // true []里的^表示否,所以除了A-Z外都包含,匹配。

正则首尾

使得正则匹配更加严格

符号含义
^放在正则最开始位置代表起始
$放在正则最后的位置代表结束

【例子】QQ号校验

/[1-9]\d{4,}/g.test('10000') // true 我们知道,QQ号以非0开始([1,9]),最少5位(\d{4,})
// 但该正则并不严谨,比如说:
/[1-9]\d{4,}/g.test('010000') // true
// 使用 ^ 辅助:
/^[1-9]\d{4,}/g.test('10000')  // true ^ 放在正则最开始位置代表起始
/^[1-9]\d{4,}/g.test('010000') // false ^ 放在正则最开始位置代表起始,显然匹配不成功

【例子】去掉字符串首尾的空格

var str = '  hahaha  ';
str.replace(/^\s+|\s+$/g, ''); // 返回得到“hahaha”

/* 释义:
^\s+ 表以1个或多个空格开始
|    或
\s+$ 表以1个或多个空格结尾
g    全局
*/

转义字符

转义字符含义
\b独立部分:起始、结束、空格
\B非独立部分
\d数字
\D非数字
\s空格
\S非空格
\w字符(数字、字母、下划线)
\W非字符
\第i个子项第i个子项的字符(串)

【例子】“.”表示任意,“\.”才表示点

var str = 'a.c';
/a.c/.test(str);  // true 正则里的“.”表示任意,包含字符串里的点“.”
/a\.c/.test(str); // true \. 表示点,即字符串里的点“.”

【例子】独不独立

var str = 'abc';
/\babc/.test(str); // true \b 处代表起始,与字符串 str 匹配
/a\bbc/.test(str); // false \b 处代表空格或结束,与字符串 str 不匹配
/a\Bbc/.test(str); // true \b 处不独立,即不是开始、结束,也不是空格,与字符串 str 匹配

【例子】\第i个子项

var str = 'abca';
/(a)(b)(c)\1/.test(str); // true \1 表第1个子项,即 a,匹配。
/(a)(b)(c)\2/.test(str); // false \2 表第2个子项,即 b,不匹配。

其他例子

【例子】日期格式转换,“-”变成“.”。
使用“匹配子项”功能,()表示子项。

var str = '2018-2-10';
var date = str.replace(/(\d+)(-)/g, function($0, $1, $2){
    // $0表示匹配的整体:(\d+)(-)。即“2018-”或“2-”。
    // $1为第1个子项,第1个括号里匹配到的内容。即“2018”或“2”。
    // $2为第2个子项,第2个括号里匹配到的内容。即“-”或“-”。
    return $1 + '.';
});
console.log(date); // 2018.2.10

【例子】常用正则

[\u4e00-\u9fa5] // 匹配中文
^\s*|\s*$ // 行首行尾空格
^\w+@[a-z0-9]+(\.[a-z]+){1,3}$ // Email
[a-zA-z]+://[^\s]* // 网址
[1-9]\d{5} // 邮政编码
[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x // 身份证
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值