【笔记】正则表达式(一)基础语法
正则表达式使用单个字符来描述、匹配一系列匹配某个句法规则的字符串。
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
包括两种字符:
- 普通字符(例如:字母)
- 特殊字符(元字符)
^[0-9]+abs$
^为匹配输入字符串的开始位置
[0-9]+匹配多个数字,[0-9]匹配单个数字,+匹配一个或者多个。
abc$匹配字母abc并以abc为结尾,$为匹配输入字符串的结束位置。
^[a-z0-9_-]{3,15}$
^开始标记
[a-z0-9_-]字母(a-z)数字(0-9)下划线_连字符
{3,15}字符的长度3-15
$结束标记
- +、*、?
- +号代表前面的字符必须至少出现一次。
- *号代表前面的字符可以不出现,也可以出现多次。
- ?号代表前面的字符最多只可以出现一次。
- [aeiou]
匹配[...]中的所有字符,匹配所有a e i o u字母。
- [^aeiou]
匹配除了[...]中字符中的所有字符,匹配字符串中除了a e i o u字母的所有字母。
- [A-Z][a-z][0-9]
匹配所有大写字母、小写字母、数字
- [\s\S]
\s是匹配所有空白符,包括换行。
\S非空白符,不包括换行。
- \w
匹配字母、数字、下划线。等价于[A-Za-z0-9_]
非打印字符
字符 | 描述 |
\f | 匹配一个换页符。 |
\n | 匹配一个换行符。 |
\r | 匹配一个回车符。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等。 |
\S | 匹配任何非空白字符。 |
\t |
匹配一个制表符。 |
\v | 匹配一个垂直制表符。 |
\cx | 匹配有x指明的控制字符。 |
特殊字符
特殊字符 | 描述 |
$ | 匹配输入字符串的结束位置。 |
() | 标记一个子表达式的开始和结束位置。 |
* | 匹配前面的子表达式零次及其+ |
+ | 匹配前面的子表达式一次及其+ |
. | 匹配除换行符之外的的任何单个字符 |
[ | 标记一个中括号表达式的开始 |
? | 匹配前面的子表达式零次或一次 |
\ | |
^ | 匹配输入字符串的开始位置。在方括号中使用是取反的效果。 |
{ | 标记限定符表达式的开始 |
| | 指明两项之间的一个选择 |
/作为特殊字符的转移表达形式
限定符
字符 | 描述 |
* | 零次及其+ |
+ | 一次及其+ |
? | 至多一次 |
{n} | 匹配确定的n次 |
{n,} | 匹配不少于n次 |
{n,m} | 匹配范围限定在n-m次中 |
*、+都是贪婪的。他们会尽可能多的去匹配。在他们后面加上一个?就可以实现非贪婪或者最小匹配。
定位符
字符 | 描述 |
^ | 匹配输入字符串开始的位置。 |
$ | 匹配输入字符串结尾的位置。 |
\b | 匹配一个单词边界,既单词与空格间的位置。 |
\B | 非单词边界匹配。 |
通过定位符还能让正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。
不能将限定符与定位符一起使用。
\b、\B用法
- /\bCha/ 匹配Chapter开头的Cha字符
- /ter\b/ 匹配Chapter末尾的ter字符
- /\Bapt/ 匹配Chapter中间的apt字符
使用多个分组进行匹配。
选择()
/([1-9])([a-z]+)/
匹配开头为一个1-9的数字,之后是连续字母的字符串
非捕获源
exp1(?=exp2) 查找exp2前面的exp1
(?<=exp1)exp2 查找exp1后面的exp2
exp1(?!exp2) 查找后面不是exp2的exp1
(?<!exp1)exp2 查找前面不是exp1的exp2
()中的是约束条件,在()外的才是真正要去匹配的内容。
反向引用
使用\n访问缓冲区。将相关匹配从左往右存储在表达式中。
(9条消息) 正则表达式中的反向引用(转载)_黄道婆的专栏-CSDN博客
var str = "Is is the the a a a cost of of gasoline going up up"; var patt1 = /\b([a-z]+) \1\b/ig;
以上代码可以取到两个连续的单词。