正则概要

简要说明RegExp对象,参照MDN文档,便于查找。

简介

正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。这些模式被用于 RegExp 的exectest方法, 以及 String 的 matchreplacesearchsplit 方法。

ES6规定了String对象的正则方法通过调用RegExp的实例方法实现,从而做到所有与正则相关的方法,全都定义在RegExp对象上。

创建

1
2
3
4
5
6
/pattern/flags                  //字面量
new RegExp(pattern [, flags]) //构造函数

/ab+c/i;
new RegExp('ab+c', 'i');
new RegExp(/ab+c/, 'i');
  • pattern:正则表达式文本
  • flags:指定标志
    • g:全局匹配;找到所有匹配,而不是在第一个匹配后停止
    • i:忽略大小写
    • m:多行;匹配每行开头结尾
    • u:Unicode; 将模式视为Unicode序列点的序列,处理四个字节的 UTF-16 编码
    • y:粘性匹配; 仅匹配目标字符串中此正则表达式的lastIndex属性指示的索引

u 修饰符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var s = '𠮷';

//点字符
/^.$/.test(s) // false
/^.$/u.test(s) // true

//Unicode 字符表示法
/\u{61}/.test('a') // false
/\u{61}/u.test('a') // true
/\u{20BB7}/u.test('𠮷') // true

//量词
/a{2}/.test('aa') // true
/a{2}/u.test('aa') // true
/𠮷{2}/.test('𠮷𠮷') // false
/𠮷{2}/u.test('𠮷𠮷') // true

//预定义模式
/^\S$/.test('𠮷') // false
/^\S$/u.test('𠮷') // true

//i 修饰符
/[a-z]/i.test('\u212A') // false
/[a-z]/iu.test('\u212A') // true

y 修饰符

1
2
3
4
5
6
7
8
9
var s = 'aaa_aa_a';
var r1 = /a+/g;
var r2 = /a+/y;

r1.exec(s) // ["aaa"]
r2.exec(s) // ["aaa"]

r1.exec(s) // ["aa"]
r2.exec(s) // null

属性

RegExp.prototype.constructor:创建该正则对象的构造函数。

RegExp.prototype.global:是否开启全局匹配,也就是匹配目标字符串中所有可能的匹配项,而不是只进行第一次匹配。

RegExp.prototype.ignoreCase:在匹配字符串时是否要忽略字符的大小写。

RegExp.prototype.lastIndex:下次匹配开始的字符串索引位置。

RegExp.prototype.multiline:是否开启多行模式匹配(影响 ^ 和 $ 的行为)。

RegExp.prototype.source:正则对象的源模式文本。

RegExp.prototype.sticky:是否开启粘滞匹配。

方法

RegExp.prototype.exec():在目标字符串中执行一次正则匹配操作。

1
2
3
4
var re = /quick\s(brown).+?(jumps)/ig;
var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');
//["Quick Brown Fox Jumps", "Brown", "Jumps", index: 4, input: "The Quick Brown Fox Jumps Over The Lazy Dog"]
//[匹配的全部字符串,分组捕获[1],分组捕获[2],匹配到的字符位于原始字符串的基于0的索引值,原始字符串]

RegExp.prototype.test():测试当前正则是否能匹配目标字符串。

RegExp.prototype.toSource():返回一个字符串,其值为该正则对象的字面量形式。覆盖了Object.prototype.toSource 方法.

RegExp.prototype.toString():返回一个字符串,其值为该正则对象的字面量形式。覆盖了Object.prototype.toString() 方法。

RegExp.prototype[@@match]():返回一个数组,它包括整个匹配结果,和通过捕获组匹配到的结果,如果没有匹配到则返回null.

RegExp.prototype[@@replace]():用替换器替换相应匹配项后的新字符串。

RegExp.prototype[@@search]():执行了一个在给定字符串中的一个搜索以取得匹配正则模式的项。

RegExp.prototype[@@split]():切割 String 对象为一个其子字符串的数组。

More Info

exec和match

  • exec它的参数是字符串,match参数是正则.
1
2
3
4
var re=new RegExp(//d/);
re.exec( "abcd" );

"abcd".match(/d);
  • exec和match返回的都是数组。exec只会返回第一个满足条件的字符,match没有全局匹配(g)时,返回结果同exec。
1
2
3
4
5
6
7
var str = 'abcda';

/a/.exec(str);//["a", index: 0, input: "abcda"]
str.match(/a/);//["a", index: 0, input: "abcda"]

/a/g.exec(str);//["a", index: 0, input: "abcda"]
str.match(/a/g);//["a", "a"]
------本文结束 感谢阅读------