饥人谷技术博客

JavaScript正则表达式基础

2019-04-04  本文已影响39人  _茂

一、简介

正则表达式是 使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
在JavaScript中,正则可以有两种初始化的方式

二、术语

1.元字符

元字符就是指那些在正则表达式中具有特殊意义的专用字符。正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。

比如\ ^ $ * + ? 等等,只要是有特殊含义的,就都是元字符

2.量词

正则里表示数量的词

比如{n} {n,} {n,m}(这里的n和m是非负整数)

3.分组和引用

有时,我们需要对某一块的正则分组,以便将来引用它,如:

/(ab)c(de)\1/这里的ab就是一个分组, de也是一个分组。\1是对第1个分组(也就是ab这个分组)的引用,引用使我们不需要重复写正则片段

4.转义

\ 就是一个转义字符,它表示将下一个字符标记为一个特殊字符

比如:

\s 能匹配任何空白字符,s本身是一个正常文本(不是元字符),但是因为前面的\是转义字符,\s就被赋予了新的含义

\d 能匹配一个数字字符,d本身是一个正常文本(不是元字符),但是因为前面的\是转义字符,\d也就被赋予了新的含义

5.零宽断言

有时我们需要捕获的内容前后必须是特定内容,但是又不希望这些特定内容出现在捕获里,就要用到零宽断言
比如:

(?=pattern)正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。

(?!pattern)正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。

这些特定内容不会出现在捕获里

6.贪婪 & 惰性

贪婪:它会根据前导字符去匹配尽可能多的内容。
惰性(非贪婪):匹配尽可能少的内容。

如果?紧跟在任何一个其他限制符 *, +, ?, {n}, {n,}, {n,m} 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串。

默认是贪婪模式,也就是说,会尽可能多的匹配搜索的字符串
比如:

对于字符串 oooo/a+?/将匹配单个 a,而/a+/将匹配所有 a

其中/a+?/ 由于有一个?,是惰性模式(非贪婪),所以一旦匹配到了一个a,就停止;
/a+/是默认到贪婪模式,所以会尽可能地匹配更多内容,所以会匹配所有的a

(完)

上一篇下一篇

猜你喜欢

热点阅读