Skip to content

正则简单实例

约 1855 字大约 6 分钟

2019-05-16

正则:用来查找、替换,拆分某些符合规则的文本

介绍一些常用的一些正则符号、规则!

  • 特殊符号

    • ^ : 从xx开始

    • $:以xx结尾

    • []:包含

    • [^]:不包含

    • ():分组 将匹配到的内容存起来 一个正则中上限9个

    • {}:限定匹配。 {n}:匹配n次 {n,}:最少匹配n次 {n,m}:最少匹配n,最多匹配m次

    • . :单个任意字符

    • *****:重复多次、贪婪匹配

    • +:重复一次或多次

    • ?:重复一次、非贪婪匹配

    • \d:所有数字 => [0-9] 取反:\D => [^0-9]

    • \w:所有字符(数字,字母,下划线) => [a-zA-Z_0-9] 取反:\W => [^a-zA-Z_0-9_]

    • |:或

    • \s:任何不可见字符 换行 空格,换页符 取反:\S:任何可见字符

    • [\u4e00-\u9fa5]:所有汉字

实例

一、.查找

1. 以1开头,5结尾

/^1.*5$/.test('125545345') 
//'^1.*5$' 解析 =》 ^1:1开始; .*:多个任意字符;  5$:5结束

2. 匹配身份证号

/^(\d{6})([1-9]{1})(\d{10})([0-9]|X)$/.test('32211520080102363X')
//'^(\d{6})([1-9]{1})(\d{10})([0-9]|X)$' 解析 =》 ^(\d{6}):以6位数字开头 ([1-9]{1}) 代表地区码; ([1-9]{1}):1-9的数字 年份 不能为0开头;   ([0-9]|X)$:0-9或者X结尾

3. 匹配手机号

/^[1-9]{2}[0-9]{9}$/.test('18888888888')
//^[1-9]{2}[0-9]{9}$ 解析 =》 ^[1-9]{2}:前2位不以0开始 [0-9]{9}$ 后9位 以0-9的数字结尾

二、替换

1. 替换所有数字

```javascript
'1a2b3c4d'.replace(/[\d/g]/,'#') //输出:#a#b#c#d 
//[\d/g] 解析:\d:数字; \g:匹配所有;  [\d/g]:匹配每个数字
```

三、分组 拆分

 string str = "aa<em>哈哈</em>bb<em>嘻嘻</em>cc";
    1. 以<em>..</em>标签内的内容分组

1557990977174

解析 <em>.*?</em> : 非贪婪模式匹配 em标签内任意可见字符重复1次

​ 如果不加?则会变成:

1557991513579

​ 因为*是贪婪模式,他会去匹配第一个em和最后一个/em 1557991601579

    1. 取em标签内的内容

1557996995568

解析<em>(.*?)</em>: 非贪婪模式 将所有满足条件的内容分组

特点 描述 \ 将下一个字符标记为特殊字符或文字。例如:

n匹配字符n。"\n" 匹配换行符。

序列\匹配\和(匹配(。

^ 匹配输入的开头。 $ 匹配输入的结尾。

  • 匹配前面的字符零次或多次。例如,“zo*”匹配z或zoo。
  • 匹配前面的字符一次或多次。例如, "zo+" 匹配zoo但不匹配z。 ? 匹配前面的字符零次或一次。例如,a?ve?匹配vein never。 . 匹配除换行符以外的任何单个字符。 ( 子表达式 )
    匹配子表达式并记住匹配项。如果正则表达式的一部分被括在括号中,则正则表达式的该部分被组合在一起。因此,可以将正则表达式运算符应用于整个组。

如果您需要在同一个正则表达式中使用匹配的子字符串,您可以使用反向引用来检索它\num,其中num = 1..n。

如果您需要在当前正则表达式之外的某处引用匹配的子字符串(例如,在另一个正则表达式中作为替换字符串),您可以使用美元符号来检索它$num,其中num = 1..n。

如果需要在子表达式中包含括号字符,请使用(或)。

X |ÿ 匹配x或y。例如,z|wood匹配z或wood。(z|w)oo匹配zoo或wood。 { n} n是一个非负整数。正好 匹配n次。例如,o{2}不匹配Ó在鲍勃,但匹配的前两个o在foooood。 { n,} n是一个非负整数。匹配至少 n次。

例如,o{2,}不匹配Ó在鲍勃和匹配所有邻的“foooood”。

o{1,}相当于o+。o{0,}相当于o。 { ñ , 米 } m和n是非负整数。匹配至少 ñ和至多 米倍。例如,o{1,3}匹配“fooooood”中的前三个 o。o{0,1}相当于o?。 [xyz] 一个字符集。匹配任何一个封闭的字符。例如,[abc]相匹配的一个中滑动。 [^ xyz ] 否定字符集。匹配任何未包含的字符。例如,[^abc]该匹配p在平原。 [ 阿兹 ] 一系列字符。匹配指定范围内的任何字符。例如,“[az]”匹配a到z范围内的任何小写字母字符。 [^ 米兹 ] 负范围字符。匹配任何不在指定范围内的字符。例如,[^m-z]匹配不在m到z范围内的任何字符。 \b 匹配单词边界,即单词和空格之间的位置。例如,er\b相匹配的ER中从来没有,但不是ER的动词。 \B 匹配非单词边界。ear\B配耳中从不早。 \d 匹配一个数字字符。相当于[0-9]。 \D 匹配一个非数字字符。相当于[^0-9]。 \f 匹配换页字符。 \n 匹配换行符。 \r 匹配回车符。 \s 匹配任何空格,包括空格、制表符、换页符等。相当于[ \f\n\r\t\v]。 \S 匹配任何非空白字符。相当于[^ \f\n\r\t\v]。 \t 匹配制表符。 \v 匹配垂直制表符。 \w 匹配任何单词字符,包括下划线。相当于[A-Za-z0 -9_]。在搜索字段中使用它。 \W 匹配任何非单词字符。相当于[^A-Za-z0-9_]。 \ 数量
匹配num,其中num是一个正整数,表示对记住的匹配的引用。

例如,(.)\1匹配两个连续的相同字符。

\n 匹配n,其中n是八进制转义值。八进制转义值的长度应为 1、2 或 3 位数字。 例如,\11与\011两个匹配制表符。

\0011相当于\001& 1。

八进制转义值不应超过 256。如果超过,则只有前两位数字构成表达式。允许在正则表达式中使用 ASCII 代码。

\xn 匹配n,其中n是十六进制转义值。十六进制转义值必须正好是两位数字长。

例如,\x41匹配A。\x041相当于\x04& 1。

允许在正则表达式中使用 ASCII 代码。

$ 查找$字符。 \$ 在搜索字段中输入的此正则表达式意味着您正在尝试\在行尾查找字符。 \l 将下一个字符的大小写更改为小写。在替换字段中使用这种类型的正则表达式。 \u 将下一个字符的大小写更改为大写。在替换字段中使用这种类型的正则表达式。 \L 将所有后续字符的大小写更改为\E小写。在替换字段中使用这种类型的正则表达式。 \U 将所有后续字符的大小写更改为\E大写。在替换字段中使用这种类型的正则表达式。 (?!) 这是“负前瞻”的模式。例如,A(?!B)表示 PhpStorm 将搜索A,但前提是后面没有B。 (?=) 这是“积极前瞻”的模式。例如,A(?=B)表示 PhpStorm 将搜索A,但如果仅后跟 则匹配B。 (?<=) 这是“正向后视”的模式。例如,(?<=B)A表示 PhpStorm 将搜索A,但前提是B它之前存在。 (?<!) 这是“负面回顾”的模式。例如,(?<!B)A表示 PhpStorm 将搜索A,但前提是B之前没有。