JavaScript 正则表达式

正则基础

正则表达式的使用

在JavaScript中创建正则表达式对象的方式有两种:第一种,使用双斜杠将表达式括起来,即 /正则表达式/。第二种,new 一个,即 new RegExp('正则表达式', ['匹配方式'])。其中第二种方式是以字符串形式传参,所以要注意字符串中的转义问题,例如要使用 \\ 来表示一个 \。

其中匹配方式可为:g,表示全局匹配;i,表示忽略大小写;m,表示执行多行匹配。

var r1 = /\w+/;
var r2 = RegExp('\\w+');
console.log(typeof r1);  //   object
console.log(typeof r2);  //   object
console.log(r1);    //     /\w+/
console.log(r2);    //     /\w+/

对于特殊字符需要使用 '\' 进行转义,例如表示 - 要使用 \- 来表示。

单个字符匹配

字符含义
.除了回车符和换行符之外的所有字符
\d数字字符
\D非数字字符
\s空白符包括空格,制表符,换行符和换页符
\S非空白符
\w单词字符(字母、数字、下划线)
\W非单词字符

使用量词匹配多个字符

字符含义
?出现零次或一次(最多出现一次)
+出现一次或多次(至少出现一次)
*出现零次或多次(任意次)
{n}出现n次
{n,m}出现n到m次
{n,}至少出现n次

单个字符范围

[]表示一个字符的集合

在 [] 中使用 ^ 可以排除没有 ^ 时字符集中的内容。使用 - 可以表示范围,例如 [0-9] 表示数字字符。使用 | 可以表示或。

边界匹配

字符含义
^n匹配开头为n的字符串
n$匹配结尾为n的字符串

^js$ 只能匹配字符串 'js' 。

分组

我们可以使用小括号 () 对表达式进行分组,分组后量词和边界匹配将作用于一组。

var r1 = /Do you know{2}/;    //只将w扩展2次
var r2 = /(Do you know){2}/;    //将'Do you know'扩展2次
console.log(r1.test('Do you knowDo you know'));    //false
console.log(r2.test('Do you knowDo you know'));    //true

test()方法

用于判断给定字符串是否和正则表达式匹配。

var r = RegExp('\\d+');
console.log(r.test('123'));    //true

exec()方法

exec()方法在匹配成功后,会返回一个Array,第一个元素是正则表达式匹配到的整个字符串,后面的元素表示匹配成功的子串。exec()方法在匹配失败时返回null

应用实例

使用 正则 + split() 实现精确切分字符串

// 获取字符串中非空白字符
var str = 'a  b\tc   \nd';
console.log(str.split(/\s+/));    //[ 'a', 'b', 'c', 'd' ]