JS 正则表达式

属性

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

  • ignoreCase:返回一个布尔值,表示是否设置了i修饰符,该属性只读。
  • global:返回一个布尔值,表示是否设置了g修饰符,该属性只读。
  • multiline:返回一个布尔值,表示是否设置了m修饰符,该属性只读。

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

  • lastIndex:返回下一次开始搜索的位置。该属性可读写,但是只在设置了g修饰符时有意义。
  • source:返回正则表达式的字符串形式(不包括反斜杠),该属性只读。

方法

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

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

2.exec() 正则对象的exec方法,可以返回匹配结果。如果发现匹配,就返回一个数组,成员是每一个匹配成功的子字符串,否则返回null

var s = '_x_x';
var r1 = /x/;
var r2 = /y/;

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

exec方法的返回数组还包含以下两个属性:

  • input:整个原字符串。
  • index:整个模式匹配成功的开始位置(从0开始计数)。
var r = /a(b+)a/;
var arr = r.exec('_abbba_aba_');

arr // ["abbba", "bbb"]

arr.index // 1
arr.input // "_abbba_aba_"

3.字符串对象方法

  a). match():返回一个数组,成员是所有匹配的子字符串。

  b). search():按照给定的正则表达式进行搜索,返回一个整数,表示匹配开始的位置。

  c). replace():按照给定的正则表达式进行替换,返回替换后的字符串。

  d). split():按照给定规则进行字符串分割,返回一个数组,包含分割后的各个成员。

  a). String.prototype.match()字符串对象的match方法对字符串进行正则匹配,返回匹配结果。(设置正则表达式的lastIndex属性,对match方法无效)

var s = '_x_x';
var r1 = /x/;
var r2 = /y/;

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

  如果正则表达式带有g修饰符,则该方法与正则对象的exec方法行为不同,会一次性返回所有匹配成功的结果。()

var s = 'abba';
var r = /a/g;

s.match(r) // ["a", "a"]
r.exec(s) // ["a"]

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

var r = /x/g;
r.lastIndex = 2; // 无效
'_x_x'.search(r) // 1

  上面代码中,正则表达式使用g修饰符之后,使用lastIndex属性指定开始匹配的位置,结果无效,还是从字符串的第一个字符开始匹配。

  c). 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"

replace方法的一个应用,就是消除字符串首尾两端的空格。

var str = '  #id div.class  ';

str.replace(/^s+|s+$/g, '')
// "#id div.class"

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

str.split(separator, [limit])//该方法接受两个参数,第一个参数是分隔规则,第二个参数是返回数组的最大成员数。

匹配规则

1.字面量字符和元字符

  大部分字符在正则表达式中,就是字面的含义,比如/a/匹配a/b/匹配b。如果在正则表达式之中,某个字符只表示它字面的含义(就像前面的ab),那么它们就叫做“字面量字符”(literal characters)。

/dog/.test("old dog") // true
//上面代码中正则表达式的dog,就是字面量字符,所以/dog/匹配“old dog”,因为它就表示“d”、“o”、“g”三个字母连在一起。

  元字符主要有以下几种:

  a).点字符(.)

    点字符(.)匹配除回车( )、换行( ) 、行分隔符(u2028)和段分隔符(u2029)以外的所有字符。

/c.t/  
//
上面代码中,c.t匹配c和t之间包含任意一个字符的情况,只要这三个字符在同一行,比如cat、c2t、c-t等等,但是不匹配coot。

  b).位置字符

    位置字符用来提示字符所处的位置,主要有两个字符。

    (1). ^ 表示字符串的开始位置

    (2). $ 表示字符串的结束位置

// test必须出现在开始位置
/^test/.test('test123') // true

// test必须出现在结束位置
/test$/.test('new test') // true

// 从开始位置到结束位置只有test
/^test$/.test('test') // true
/^test$/.test('test test') // false

  c).选择符(|

   在正则表达式中表示“或关系”(OR),即cat|dog表示匹配catdog

/11|22/.test('911') // true

  上面代码中,正则表达式指定必须匹配1122

/a( |	)b/.test('a	b') // true
//上面代码指的是,a和b之间有一个空格或者一个制表符。

  其他的元字符还包括\*+?()[]{}等,下面分开逐一介绍

  d). 重复类

    模式的精确匹配次数,使用大括号({})表示。{n}表示恰好重复n次,{n,}表示至少重复n次,{n,m}表示重复不少于n次,不多于m次。

/lo{2}k/.test('look') // true
/lo{2,5}k/.test('looook') // true

    上面代码中,第一个模式指定o连续出现2次,第二个模式指定o连续出现2次到5次之间。

  e). 量词符

    量词符用来设定某个模式出现的次数。

    ? 问号表示某个模式出现0次或1次,等同于{0, 1}

      *  星号表示某个模式出现0次或多次,等同于{0,}

     加号表示某个模式出现1次或多次,等同于{1,}

 

原文地址:https://www.cnblogs.com/z-dl/p/8301112.html