js正则表达式学习笔记
正则表达式创建
字面量创建,a = /abc/gim;
构造函数创建,a = new RegExp('abc','gim')
正则表达式中的特殊字符,
[...] 方括号中的任意字符
[^...] 非方括号中的任意字符
s 空白字符
S 非空白字符
d 数字
D 非数字
w 字母和数字,相当于[a-zA-Z0-9]
W 非字母和数字
重复
{m,n} 介于m到n次之间
{m} 恰好等于m次
{m,} 大于等于m次
? 0次或者1次
* 0次或者n次
+ 1次或者n次
贪婪的匹配
重复的一种,贪婪的匹配即普通的书写方式,尽可能多的匹配;非贪婪的匹配就是尽可能少的匹配,在重复的表示符号后面加上?,例如/a?/,字符串为aaaa,将会匹配第一个a。需要注意的是,/a?b/来匹配aaaab得到的匹配结果是aaaab,而不是ab。
选择
选择通过‘|’来实现,用于分隔供选择的字符。匹配的次序是从左到右,如果左边已经匹配了,就不考虑右边的匹配项了。当然,然后是全局匹配的话可以找出所有的匹配项。
分组
小括号功能较多有三种功能,
1.作用一,把单独的项组合成子表达式。将一段字符串组成子表达式,例如/java(script)?/就可以用来匹配Java以及JavaScript。
2.作用二,定义子模式,在调用exec方法的时候,返回值的数组第二项开始就是子模式的匹配结果了。
3.作用三,允许后面引用前面的表达式。例如,1引用的是第一个圆括号对应的表达式,2引用的是第二个圆括号对应的表达式。例如要匹配字符串中的子字符串,子字符串的引号应该相同,同为单引号或者同为双引号。在不借助引用的情况下只能这么写,/["']S["']/。这样做不到同为单引号或者双引号,可以改为/["']11/
指明位置
^x 以x为开始
x$ 以x结束
/bjava/ 匹配Java
/Bjava/ 匹配ajava,不匹配Java,因为B表示单词不在这里断
(?=p) 零宽正向断言,后面必须有p,但是不匹配p;这里说的不匹配p意思是通过match函数的返回数组中不包含p,即这里的p只是作为一个条件。例如 /java(?=:)/,它不匹配JavaScript,匹配JavaScript:。
(?!p) 零宽负向断言,后面必须没有p,同时不匹配p。例如/java(?!:)/,它匹配JavaScript,它不匹配JavaScript:。
修饰符
i 忽略大小写
g 全局多次匹配
m 多行匹配
写法实例:/[abc]/gim可以匹配a、b、c、A、B、C。如果字符串有多个,所有的匹配项都可以匹配出来。
/abc$/g,这个表达式至多能匹配出一个匹配项
/abc$/gm,这个表达式可以匹配出多个匹配项,将每次换行都看作是一次结束
正则表达式的方法
这里说的方法,即包括字符串和正则表达式相关的方法,也包括正则表达式自身的方法
字符串的四个方法,
String.search() 查找第一个匹配项的索引
Sring.replace() 第一个参数是正则表达式,如果正则表达式是全局那么将替换掉所有的匹配项
String.match() 得到所有的放回项数组。如果这时的正则表达式是一个非全局的,那么和正则表达式exec()方法拿到的结果相同。
String.split(),也可以接受一个正则表达式作为参数。
regexp有两个方法,分别是exec和test。exec的返回值是一个数组,test的方式值时一个布尔类型。
- '" ↩