javascript 之正则表达式

关于正则表达式的文章千千万万,在此我自己整理一下正则表达式相关的内容,作为学习笔记吧。

正则表达式的概念:

正则表达式是由一个字符序列形成的搜索模式。

正则表达式的使用:

  • 在搜索数据时,可以用正则表达式来描述需要查询的内容。
  • 在替换数据时,可以用正则表达式来描述需要替换的内容。

直接量语法:/pattern/modifiers;

例:

var patt = /javascript/i;
  

上面的例子中,“javascript"是需要匹配的减缩内容,i 是修饰符的一种,表示忽略大小写。

创建 RegExp 对象的语法:new RegExp(pattern,attributes);

例:

var patt2 = new RegExp("javascript",i);
  

上面例子中的 javascript 和 i 和直接量语法中的内容的作用相同。

正则表达式有两种使用的方式

  1. 一种是利用字符串的方法来使用,比如 match(),search(),replace(),split()
  2. 一种是利用 RegExp 对象的方法来使用,比如test(),exec()

在下面在继续展开这些方法的作用和调用方式。

这里有一个关键内容,上面讲到的直接量语法和 RegExp 对象创建语法虽然作用是相同的,但是在创建过程中有一个明显的区别,如下:

var exp1 = /w+/g;
var exp2 = new RegExp("/\w+/",g);
  

上面两个表达式的作用是相同的,但是在使用 RegExp 对象的时候,需要使用到字符串转译符 ()。另外直接量语法创建出来的正则表达式对象效率更高。

正则表达式的修饰符:

  • i :执行对大小写不敏感的匹配
  • g :执行全局匹配(默认正则表达式在找到第一个匹配对象后就不再寻找,通过 g 可以让正则表达式匹配出所有的内容)
  • m :执行多行匹配

正则表达式模式 (方括号用于查找某个范围内的字符):

字符说明
字母数字字符自身
f换页符
n换行符
r回车
t制表符
v垂直制表符
/一个 / 直接量
\一个 直接量
.一个 . 直接量
一个 直接量
+一个 + 直接量
?一个 ? 直接量
(一个 ( 直接量
)一个 ) 直接量
[一个 [ 直接量
]一个 ] 直接量
{一个 { 直接量
}一个 } 直接量
XXX由十进制数 XXX 指 定的 ASCII 码字符
Xnn由十六进制数 nn 指定的拉丁字符,例如,x0A 等价于 n
cX控制字符^X. 例如, cI 等价于 t, cJ 等价于 n
uxxxx由十六进制数 xxxx 指定的 Unicode 字符,例如 u0009 等价于 t
[…]位于括号之内的任意字符
[^…]不在括号之中的任意字符
.除了换行符之外的任意字符,等价于[^n]
w任何单字字符, 等价于[a-zA-Z0-9_] (注意这里包含下滑线,原文有错误)
W任何非单字字符,等价于[^a-zA-Z0-9_] (注意这里包含下滑线,原文有错误)
s任何空白符,等价于[tnrfv]
S任何非空白符,等价于[^tnrfv]
d任何数字,等价于[0-9]
D除了数字之外的任何字符,等价于[^0-9]
[b]一个退格直接量 (特例)
{n, m}匹配前一项至少 n 次,但是不能超过 m 次
{n, }匹配前一项 n 次,或者多次
{n}匹配前一项恰好 n 次
?匹配前一项 0 次或 1 次,也就是说前一项是可选的. 等价于 {0, 1}
+匹配前一项 1 次或多次,等价于{1,}
*匹配前一项 0 次或多次.等价于{0,}
^匹配的是字符的开头,在多行检索中,匹配的是一行的开头
$匹配的是字符的结尾,在多行检索中,匹配的是一行的结尾
b匹配的是一个词语的边界.简而言之就是位于字符 w 和 w 之间的位置 (注意:[b]匹配的是退格符)
B匹配的是非词语的边界的字符