饥人谷技术博客

RegExp对象—匹配规则

2017-05-26  本文已影响0人  林立镇

1.字面量字符和元字符

image.png

1.1字面量字符

大部分字符在正则表达式中,就叫做“字面量字符”

/dog/匹配“old dog”,因为它就表示“d”、“o”、“g”三个字母连在一起。

2元字符 .、^、$、|、\、*、+、?、()、[]、{}

还有一部分字符有特殊含义,不代表字面的意思

2.1点字符 .

2.2选择符 |

表示“或关系”(OR),
cat|dog表示匹配cat或dog。
多个选择符可以联合使用。

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

2.2字符类 []

表示字符类里的字符,只要匹配其中一个就可以

[xyz] 表示x、y、z之中任选一个匹配

2.2.1脱字符 ^

表示紧跟脱字符的字面量字符,其他字符都可以匹配。
[^xyz]表示除了x、y、z之外都可以匹配。
字符类只有脱字符[^]
表示匹配一切字符,其中包括换行符,而点号(.)是不包括换行符的

2.2.2连字符 -

表示有连续序列的字符的连续范围
字符类的连字符必须在头尾两个字符中间,才有特殊含义,否则就是字面含义

[0123456789]可以写成[0-9]
[0-9.,]
[0-9a-fA-F]
[a-zA-Z0-9-]
[1-31]

最后一个字符类[1-31],不代表1到31,只代表1到3。
在ASCII编码之中,大写字母与小写字母之间还有其他字符,结果就会出现意料之外的结果。反斜杠(\)的ASCII码在大写字母与小写字母之间

2.2.3 预定义模式

QQ图片20170530151647.png

2.3位置字符 ^、$

用来提示字符所处的位置

2.4转义符 \特殊字符^、.、[、$、(、)、|、*、+、?、{、\

特殊含义的字符,要匹配它们本身,就需要在它们前面要加上反斜杠。

比如要匹配加号,就要写成+。

使用RegExp方法生成正则对象,
转义需要使用两个斜杠,因为字符串内部会先转义一次。

(new RegExp('1+1')).test('1+1') // false
(new RegExp('1\+1')).test('1+1') // true

2.5特殊字符 \cX、[\b]、\n、\r、\t、\v、\f、\0、\xhh、\uhhhh

不能打印的特殊字符

2.6重复类 {匹配次数} ? * +

模式的精确匹配次数

2.6.1量词符 ? * +

量词符紧跟着字符后面
?
问号表示某个模式出现0次或1次,等同于{0, 1}。
*
星号表示某个模式出现0次或多次,等同于{0,}。
+
加号表示某个模式出现1次或多次,等同于{1,}。

2.6.2贪婪模式、非贪婪模式 *? *+

2.7修饰符 g i m

表示模式的附加规则,放在正则模式的最尾部。
修饰符可以单个使用,也可以多个一起使用

2.7.1 g

2.7.2 i

2.7.3 m

2.8组匹配 ( )

除了返回匹配的内容(包括该组匹配的内容)
还会单独返回括号内的内容即该组匹配的内容

2.8.1概述 嵌套 \1 \2

var m = 'abcabc'.match(/(.)b(.)\1\2/); m // ['abc', 'a', 'c',’a’,’c’,]
可以用\n引用括号匹配的内容,n是从1开始的自然数,表示对应顺序的括号

var m = 'abcabc'.match(/(b(.))\1\2/); m // ['bc', 'c',’bc,’c’,]
\1指向外层括号,\2指向内层括号

2.8.2非捕获组 (?:x)

只返回匹配的内容(包括该组匹配的内容)
不返回该组匹配的内容

var m = 'abc'.match(/(?:.)b(.)/); m // ["abc", "c"]

2.8.3先行断言 x(?=y)

x只有在y前面才匹配,y不会被计入返回结果,因为括号里的部分是不会返回的

var m = 'abc'.match(/b(?=c)/); m // ["b"]

2.8.4先行否定断言 x(?!y)

x只有不在y前面才匹配,y不会被计入返回结果,括号里的部分是不会返回的

/\d+(?!.)/.exec('3.14') // ["14"]](https://img.haomeiwen.com/i5467482/2a101038cc487c26.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

1.字面量字符和元字符

1.1字面量字符

大部分字符在正则表达式中,就叫做“字面量字符”

/dog/匹配“old dog”,因为它就表示“d”、“o”、“g”三个字母连在一起。

2元字符 .、^、$、|、\、*、+、?、()、[]、{}

还有一部分字符有特殊含义,不代表字面的意思

2.1点字符 .

2.2选择符 |

表示“或关系”(OR),
cat|dog表示匹配cat或dog。
多个选择符可以联合使用。

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

2.2字符类 []

表示字符类里的字符,只要匹配其中一个就可以

[xyz] 表示x、y、z之中任选一个匹配

2.2.1脱字符 ^

表示紧跟脱字符的字面量字符,其他字符都可以匹配。
[^xyz]表示除了x、y、z之外都可以匹配。
字符类只有脱字符[^]
表示匹配一切字符,其中包括换行符,而点号(.)是不包括换行符的

2.2.2连字符 -

表示有连续序列的字符的连续范围
字符类的连字符必须在头尾两个字符中间,才有特殊含义,否则就是字面含义

[0123456789]可以写成[0-9]
[0-9.,]
[0-9a-fA-F]
[a-zA-Z0-9-]
[1-31]

最后一个字符类[1-31],不代表1到31,只代表1到3。
在ASCII编码之中,大写字母与小写字母之间还有其他字符,结果就会出现意料之外的结果。反斜杠(\)的ASCII码在大写字母与小写字母之间

2.2.3 预定义模式

2.3位置字符 ^、$

用来提示字符所处的位置

2.4转义符 \特殊字符^、.、[、$、(、)、|、*、+、?、{、\

特殊含义的字符,要匹配它们本身,就需要在它们前面要加上反斜杠。

比如要匹配加号,就要写成+。

使用RegExp方法生成正则对象,
转义需要使用两个斜杠,因为字符串内部会先转义一次。

(new RegExp('1+1')).test('1+1') // false
(new RegExp('1\+1')).test('1+1') // true

2.5特殊字符 \cX、[\b]、\n、\r、\t、\v、\f、\0、\xhh、\uhhhh

不能打印的特殊字符

2.6重复类 {匹配次数} ? * +

模式的精确匹配次数

2.6.1量词符 ? * +

量词符紧跟着字符后面
?
问号表示某个模式出现0次或1次,等同于{0, 1}。
*
星号表示某个模式出现0次或多次,等同于{0,}。
+
加号表示某个模式出现1次或多次,等同于{1,}。

2.6.2贪婪模式、非贪婪模式 *? *+

2.7修饰符 g i m

表示模式的附加规则,放在正则模式的最尾部。
修饰符可以单个使用,也可以多个一起使用

2.7.1 g

2.7.2 i

2.7.3 m

2.8组匹配 ( )

除了返回匹配的内容(包括该组匹配的内容)
还会单独返回括号内的内容即该组匹配的内容

2.8.1概述 嵌套 \1 \2

var m = 'abcabc'.match(/(.)b(.)\1\2/); m // ['abc', 'a', 'c',’a’,’c’,]
可以用\n引用括号匹配的内容,n是从1开始的自然数,表示对应顺序的括号

var m = 'abcabc'.match(/(b(.))\1\2/); m // ['bc', 'c',’bc,’c’,]
\1指向外层括号,\2指向内层括号

2.8.2非捕获组 (?:x)

只返回匹配的内容(包括该组匹配的内容)
不返回该组匹配的内容

var m = 'abc'.match(/(?:.)b(.)/); m // ["abc", "c"]

2.8.3先行断言 x(?=y)

x只有在y前面才匹配,y不会被计入返回结果,因为括号里的部分是不会返回的

var m = 'abc'.match(/b(?=c)/); m // ["b"]

2.8.4先行否定断言 x(?!y)

x只有不在y前面才匹配,y不会被计入返回结果,括号里的部分是不会返回的

/\d+(?!.)/.exec('3.14') // ["14"]

上一篇下一篇

猜你喜欢

热点阅读