概述

 

新建正则表达式有两种方法。一种是使用字面量,以斜杠表示开始和结束。

 

var regex = /xyz/;

另一种是使用RegExp构造函数。

 

var regex = new RegExp('xyz');

 

RegExp构造函数还可以接受第二个参数,表示修饰符(详细解释见下文)。

 

var regex = new RegExp('xyz', 'i');

// 等价于

var regex = /xyz/i;

上面代码中,正则表达式/xyz/有一个修饰符i。

 

 

实例属性

正则对象的实例属性分成两类。

 

一类是修饰符相关,返回一个布尔值,表示对应的修饰符是否设置。

 

RegExp.prototype.ignoreCase:返回一个布尔值,表示是否设置了i修饰符。

RegExp.prototype.global:返回一个布尔值,表示是否设置了g修饰符。

RegExp.prototype.multiline:返回一个布尔值,表示是否设置了m修饰符。

上面三个属性都是只读的。

 

var r = /abc/igm;

 

r.ignoreCase // true

r.global // true

r.multiline // true

另一类是与修饰符无关的属性,主要是下面两个。

 

RegExp.prototype.lastIndex:返回一个数值,表示下一次开始搜索的位置。该属性可读写,但是只在设置了g修饰符、进行连续搜索时有意义,详细介绍请看后文。

RegExp.prototype.source:返回正则表达式的字符串形式(不包括反斜杠),该属性只读。

var r = /abc/igm;

 

r.lastIndex // 0

r.source // "abc"

 

实例方法

RegExp.prototype.test()

正则实例对象的test方法返回一个布尔值,表示当前模式是否能匹配参数字符串。

 

/cat/.test('cats and dogs') // true

上面代码验证参数字符串之中是否包含cat,结果返回true。

 

RegExp.prototype.exec()

正则实例对象的exec方法,用来返回匹配结果。如果发现匹配,就返回一个数组,成员是匹配成功的子字符串,否则返回null

var s = '_x_x';

var r1 = /x/;

var r2 = /y/;

 

r1.exec(s) // ["x"]

r2.exec(s) // null

上面代码中,正则对象r1匹配成功,返回一个数组,成员是匹配结果;正则对象r2匹配失败,返回null。

 

 

字符串的实例方法

String.prototype.match()

 

字符串实例对象的match方法对字符串进行正则匹配,返回匹配结果。

 

var s = '_x_x';

var r1 = /x/;

var r2 = /y/;

 

s.match(r1) // ["x"]

s.match(r2) // null

从上面代码可以看到,字符串的match方法与正则对象的exec方法非常类似:匹配成功返回一个数组,匹配失败返回null。

 

 

String.prototype.search()

字符串对象的search方法,返回第一个满足条件的匹配结果在整个字符串中的位置。如果没有任何匹配,则返回-1。

 

'_x_x'.search(/x/)

// 1

上面代码中,第一个匹配结果出现在字符串的1号位置。

 

 

String.prototype.replace()

字符串对象的replace方法可以替换匹配的值。它接受两个参数,第一个是正则表达式,表示搜索模式,第二个是替换的内容。

 

str.replace(search, replacement)

正则表达式如果不加g修饰符,就替换第一个匹配成功的值,否则替换所有匹配成功的值。

 

'aaa'.replace('a', 'b') // "baa"

'aaa'.replace(/a/, 'b') // "baa"

'aaa'.replace(/a/g, 'b') // "bbb"

上面代码中,最后一个正则表达式使用了g修饰符,导致所有的b都被替换掉了。

 

 

 

replace方法的第二个参数还可以是一个函数,将每一个匹配内容替换为函数返回值。

 

'3 and 5'.replace(/[0-9]+/g, function (match) {

  return 2 * match;

})

// "6 and 10"

 

var a = 'The quick brown fox jumped over the lazy dog.';

var pattern = /quick|brown|lazy/ig;

 

a.replace(pattern, function replacer(match) {

  return match.toUpperCase();

});

// The QUICK BROWN fox jumped over the LAZY dog.

 

 

String.prototype.split()

字符串对象的split方法按照正则规则分割字符串,返回一个由分割后的各个部分组成的数组。

 

str.split(separator, [limit])

该方法接受两个参数,第一个参数是正则表达式,表示分隔规则,第二个参数是返回数组的最大成员数。

 

// 非正则分隔

'a,  b,c, d'.split(',')

// [ 'a', '  b', 'c', ' d' ]

 

// 正则分隔,去除多余的空格

'a,  b,c, d'.split(/, */)

// [ 'a', 'b', 'c', 'd' ]

 

// 指定返回数组的最大成员

'a,  b,c, d'.split(/, */, 2)

[ 'a', 'b' ]

 

posted on 2018-02-24 11:08  Sharpest  阅读(146)  评论(0编辑  收藏  举报