JavaScript:正则表达式:基础语法,test()、search()、exec()和replace()
一、正则表达式基础语法(Regular Expression)
1、正则表达式的创建方式:对象new RegExp(“正则表达式”, “修饰符”) 或者 /正则表达式/修饰符
伪代码
var reg = new RegExp("正则表达式","igm");
var reg = /正则表达式/igm;
2、分组()和分隔|
(1)| 用于分割可供选择的字符,要与 ( ) 搭配使用,存在优先匹配:从左到右(从繁到简)。注意与 [ ] 搭配,就是他本身 |,不代表分割。
如 [ab|cd],既可以匹配 ab 也可以匹配 cd。
选择项的尝试匹配次序是左——>右,因此,[a | ab]中当a匹配之后,就不匹配 ab 了,即使 ab 更优。所以书写顺序应该是从繁到简。
(2)() 分组,作用1:把一部分作为整体;作用2:定义子模式方便后面引用
作为整体,加上重复次数,如
/java(script)?/
可以匹配java和javascript
定义子模式,方便后面通过\加数字引用,例如
/["][a-z]["]/
/(["])[a-z]\1/
效果相同
3、\转译^$.*+?=|!/:{}()[] 、字符类、重复次数、位置锚点、修饰符
(1)特殊字符,^$.*+?=|!/:{}()[] 需要\转译
\o \t \n \v \f \r
^$.*+?=|!/:{}()[] 需要\转译
(2)字符类,[\w\W\s\S\d\D]
符号 | 意义 |
---|---|
[...] | 方括号内的任意字符 |
[^...] | 不在方括号内的任意字符 |
[a-b] | 字符范围。匹配包含的任一字符集 |
[^a-b] | 反向范围字符。匹配不在指定范围内的任何字符 |
. | 任意字符 |
\w | 任何ASCII字符组成的单词,等价于[a-zA-Z0-9] |
\W | 任何不适ASCII字符组成的单词,等价于[^a-zA-Z0-9] |
\s | 任何Unicode空白符 |
\S | 任何非Unicode空白符的字符,注意\w和\S不一样 |
\d | 任何ASCII数值,等价于[0-9] |
\D | 任何ASCII数字之外的任何字符,等价于[^0-9] |
[\b] | 退格直接量(特例) |
(3)重复次数,?+*{n}{n,}{m,n}
符号 | 意义 |
---|---|
? | 0或1次 |
+ | 1次或多次 |
* | 任意次 |
{n} | n次 |
{n,} | n次或n次以上 |
{m,n} | 最少m次,最多n次 |
正则是贪婪的,在全体满足匹配条件的情况下,尽可能贪婪。
(4)位置锚点,^$\b\B(?=p)(?!p)
符号 | 意义 |
---|---|
^ | 匹配字符串的开头,在多行检测中,匹配一行的开头 |
$ | 匹配字符串的结尾,在多行检测中,匹配一行的结尾 |
\b | 匹配一个单词边界的位置 |
\B | 匹配非单词边界的位置 |
(?=p) | 零宽正向先行断言(要求接下来的字符都与p匹配,但不能包含匹配p的那些字符) |
(?!p) | 零宽负向先行断言(要求接下来的字符不与p匹配) |
(5)修饰符,igm
符号 | 意义 |
---|---|
i | 执行不区分大小写的匹配 |
g | 执行一个全局匹配,简而言之,即找到所有的匹配,而不是在找到第一个之后就停止 |
m | 多行匹配模式 |
Attention(注意):
当修饰符是是全局 g 的时候,每次 exec() 和 test() 的时候,游标都会把当前位置的 lastIndex 设置为当前的设置,再次执行的时候就会从 lastIndex 的位置开始执行,因此最好每次执行的时候 lastIndex 设置为 0
二、reg.test()、reg.exec()、str.search()和str.replace()
(1)reg.test()
检测字符串中是否包含匹配的字符串,返回值:true/false
修饰符为"g"时,游标不会自动归零
<script>
var str = "My name is Mike";
var reg = /m/;
var result = reg.test(str)
console.log(result)
// 显示:True
var result = reg.test(str)
console.log(result)
// 显示:True
var result = reg.test(str)
console.log(result)
// 显示:True
var result = reg.test(str)
console.log(result)
// 显示:False
</script>
(2)reg.exec()
对string进行正则处理,并返回匹配的结果,array[0] 为原字符串,array[i] 为每个括号 ( ) 中匹配上的内容。
<script>
var str = "My name is Mikeme";
var reg = /(m)(e)/ig;
var result = reg.exec(str)
console.log(result)
// 显示:["me", "m", "e", index: 5, input: "My name is Mikeme", groups: undefined]
var result = reg.exec(str)
console.log(result)
// 显示:["me", "m", "e", index: 15, input: "My name is Mikeme", groups: undefined]
var result = reg.exec(str)
console.log(result)
// 显示:null
var result = reg.exec(str)
console.log(result)
// 显示:["me", "m", "e", index: 5, input: "My name is Mikeme", groups: undefined]
console.log(result[0])
// 显示:me
</script>
(3)str.search()
根据pattern进行正则匹配,如匹配到一个结果,则返回它的索引数,否则返回-1
<script>
var str = "My name is Mike";
var reg = /m/;
var ret = str.search(reg);
console.log(ret);
// 显示:5
</script>
(4)str.replace()
根据pattern进行正则匹配,把匹配结果替换为replacement
<script>
var str = "My name is Mike";
var reg = /m/ig;
var rep = str.replace(reg, "I")
console.log(rep)
// 显示:Iy naIe is Iike
</script>