《极简JavaScript正则教程》

JavaScript中的正则内容说多其实也很少,但要全面完全掌握,也须要花费一些精力。本文的内容不会详细全面讲解,那会是一个颇为庞大的工程。会试着从一些重要概念的角度,梳理一下正则中须要掌握的经常使用的知识点。正则表达式

1、正则中的基础概念

1.1元字符

元字符是正则表达式中具备特殊含义的字符,这些字符没法用来表明它们本身自己。例如*号在正则中并不表明*号自己,而表示匹配任意字符。常见的正则元字符以下。bash

\w  匹配单词字符
\W  匹配非单词字符
\d  匹配数字
\D  匹配非数字
\s  匹配空格
\S  匹配非空格
\b  匹配单词边界
\B  匹配非单词边界
\n  匹配换行符号
\r  匹配回车
\   正则中用于转义
^   匹配字符串开头
$   匹配字符串结尾
复制代码

1.2字符类

字符类指的是使用元字符'[]'构建的一个匹配范围。例如: /[abcde]/g;表明的是匹配abcde这些字符中的任意一个。 还有一种是反向字符类,表明的是匹配除了字符类中出现的字符之外的任意字符,例如: /[^abc]/g;表明的是匹配除了abc意外任意的字符。ui

2、正则中的量词

量词的功能是在正则表达式中匹配字符重复出现的次数。主要有spa

?   匹配字符出现零次或者一次,最多一次
+   匹配字符出现一次或屡次,至少一次
*   出现任意次,零次或者无数次
{n,m}   匹配出现n次到m次的字符,包括n和m
复制代码

3、正则中的分组

正则中使用元字符()来进行分组,分组的内容能够进行捕获,并在正则中重用。code

let reg = /(\d{4})-\1/g;
复制代码

例如在上述正则表达式中,括号内匹配4个数字就是一个分组,而这个分组匹配到的内容,能够在后续的正则表达式中利用,在这个正则中就是'\1',表示等同于第一个分组。 固然有些状况下,咱们不但愿某些分组被捕获,若是须要某些分组不被捕获,能够在分组的开始位置加上'?:'。例如。ip

let reg = /(\d{5})-(?:\d{3})-(\d{1})/g;
复制代码

上述正则中第二个分组就不会被捕获,后续正则中'\2'引用分组,表明的是(\d{1})这个分组中捕获的内容。字符串

4、贪婪模式和非贪婪模式

正则中的量词默认是贪婪模式,也就是说会尽量多的匹配符合要求的字符。例如string

let str = 'ababababababab';
let reg = /(ab){3,5}/g;
str.replace(reg, 'M');  // Mabab
复制代码

在能够匹配3个到5个ab的状况下,默认的贪婪模式匹配了5个。
在量词后面加上?可让正则转为非贪婪模式。一样的例子。class

let str = 'ababababababab';
let reg = /(ab){3,5}?/g;
str.replace(reg, 'M');  // "MMab"
复制代码

5、正向查找和负向查找

正向断言指定了一个必须匹配但不在结果中返回的模式。一个向前查找模式其实就是一个以?=开头的子表达式,须要匹配的文本跟在=的后面。例如。基础

let str = 'a1bMa2bVa3bKa4bG';
let reg = /(a\db)(?=K)/g;
str.match(reg);     // ["a3b"]
复制代码

(a\db)咱们知道是一个子项,匹配的是'a数字b'这样的规则,而子项后面的那个子项就是正向查找,它限定了子项后面的那个位置必须匹配到'K'。符合这个规则的只有'a3b'。

相关文章
相关标签/搜索