js学习笔记(九)正则表达式
1、正则表达式的创建
1)直接量创建法:
var pattern=/s$/;
像字符串的创建可以用一对引号一样,正则表达式的创建则可以用一对斜杠号(//)
2)对象创建法:
var pattern=new RegExp(“s$”); //这个式子与上面那个事等价的
正如字符串可以通过String对象来创建一样,正则表达式也可以通过RegExp对象来创建。
2、字符类
将单独的直接量字符放进方括号内就可以组合成字符类,一个字符类和它所包含的任何字符都匹配,所以正则表达式/[abc]/和字母a、b、c中的任意一个都匹配。
另外还可以定义否定字符类,这些类匹配的是不包含在方括号内的任意一个字符。定义否定字符类的时候要将一个^符号作为方括号内的第一个字符,如/[^abc]/匹配的是除字母a、b、c 以外的任何字符。
字符类可以用连字符来表示一个字符范围,例如要匹配任何数字可以使用/[0-9]/,其相当于/[0123456789]/,要匹配任意的小写字母可使用/[a-z]/,要匹配任何大写字母可使用/[A-Z]/,要匹配任意数字和字母可使用/[a-zA-Z0-9]/
预定义类
. | 除了换行和回车之外的任意字符 |
\d | 数字 |
\D | 非数字 |
\w | 字母 |
\W | 非字母 |
\s | 空白字符 |
\S | 非空白字符 |
3、重复(简单量词)
指定重复的字符出现在它们所作用的模式之后
{n,m} 匹配前一项至少n次,但是不能超过m次,即n<=匹配次数<=m
{n,} 匹配前一项至少n次, 即n<=匹配次数
{n} 匹配前一项恰好n次, 即n=匹配次数
? 匹配前一项0次或1次
+ 匹配前一项至少一次
* 匹配前一项0次或多次
/\d{2,4}/ 匹配一个2位数、3位数或4位数
/\w{3}\d?/ 匹配3个字符或3个字符加一个数字
注意:在使用?和*时要注意,由于它们都可以匹配0次,所以它们允许什么都不匹配,例如/a*/实际上与字符串”bbbb”是匹配的,因为它含有0个a
贪婪、惰性、和支配性的量词:
在简单的量词后加一个?号,表示的是惰性匹配,如*?;不加则表示贪婪匹配;加一个+则表示整个字符串匹配,如*+
贪婪匹配是从后向前的,方式是从0个开始,逐个删除末尾字符,直到匹配成功或字符全部删除完。
惰性匹配是从前向后,方式是从1个开始,逐个字符增加的读取字符串,直到匹配成功。
支配量词则是与整个字符串进行匹配。
4、字符“|”用于分隔供选择的字符。
例如/ab|cd|ef/ 匹配的是ab或cd或ef
/\d{3}|[a-z]{4}/ 匹配的是3个数字或4个小写字母
注意:选择项是从左到右考虑,一旦发现了匹配项就会停止匹配,即使后面还有匹配项
5、括号的作用
1)把单独的项目组合成子表达式,以便可以像处理一个独立的单元那样使用|、*、+、?等符号来处理他们,例如:
/java(script)?/ 可以匹配java 也可以匹配 javascript
/(ab|cd)+|ef/ 匹配的是ab或cd或ef
2)我们可以在正则表达式的后部引用前面括号内表达式所匹配的内容,这个内容要在进行具体匹配时才能确定。 引用的方法是通过在“\”后加一位数字或多位数字来实现的,数字指定了带括号的字表达式在正则表达式中的位置,例如\1引用的是第一个代括号的子表达式的匹配内容,\2引用的是第二个,如果有括号嵌套的情况发生,则不要管嵌不嵌套,直接从左边数起,看看要引用的带括号的字表达式的左边括号在所有左边括号中所处的位置。例如(a(b)(a)),要引用(a) 则使用 \3