(一)字符类
[...] 方括号内的任意字符
[^...] 不在方括号内的任意字符
. 除换行符和其它Unicode行终止符之外的任意字符
\w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
\W 任何非ASCII字符组成的单词,等价于[^a-zA-Z0-9]
\s 任何Unicode空白符
\S 任何非Unicode空白符
\d 任何数字,等价于[0-9]
\D 任何非数字,等价于[^0-9]
(二)重复字符语法
{n,m} 匹配前一项至少n次,但不能超过m次
{n,} 匹配前一项n次或更多次
{n} 匹配前一项n次
? 匹配前一项0次或1次,等价{0,1}
+ 匹配前一项1次或多次,等价于{1,}
* 匹配前一项0次或多次,等价于{0,}
默认贪婪匹配:/a{1,3}/ 匹配'aaa'
非贪婪匹配,只需要在重复字符后面加上? /a{1,3}?/ 匹配'a'
(三)选择,分组,引用
| 选择,匹配该符号左边的子表达式或右边的子表达式: /\d{3}|[a-z]{4}/ 匹配三位数字或者四个小写字母
() 分组
1. 可以把单独的项组合成子表达式,以便可以像处理一个单独的单元那样用 | * + ?等对单元内的项进行处理: /java(script)?/
2. 分组之后可以引用 \n表示引用第n个分组表达式匹配内容: /(['"])[^'"]*\1/
(四)指定匹配位置
^ 匹配字符串开头
$ 匹配字符串结尾
\b 匹配单词边界
(五)修饰符
i 不区分大小写
g 全局匹配,即找到所有匹配,而不是找到第一个之后就停止
(六)String正则匹配方法
search: 参数是正则,返回一个与之匹配的字串的起始位置,匹配不到返回-1
'javascript'.search(/script/i) 返回4
replace: 第一个参数是正则,第二个是要替换的字符串、$开头的特殊字符串、函数
'javascript'.replace(/script/gi,'Script') 返回javaScript
第二个参数可以是$n,代表第n个组合所匹配的字符串
'javascript'.replace(/(sc)ript/gi,"$1") 返回javasc
第二个参数可以是函数
'a=1&b=2'.replace(/(\w+)=(\w+)&?/g,function($1,$2,$3){console.log($1,$2,$3) }) a=1& a 1 b=2 b 2
match:参数是正则,返回一个由匹配结果组成的数组
带g:'1 ldf 3 dsfdf 4f'.match(/\d+/g) 返回['1','3','4']
不带g:
'1 ldf 3 dsfdf 4f'.match(/\d+/) 返回["1", index: 0, input: "1 ldf 3 dsfdf 4f"]
'abcd'.match(/(ab)c/) 返回["abc", "ab", index: 0, input: "abcd"] 还会把组合匹配到的字符放到数组中
(七)正则方法
test:参数为字符串,判断是否匹配成功
/java/.test('javascript') 返回true
exec:如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。我们可以看得出,在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。
/java/.exec('javascript') 返回["java", index: 0, input: "javascript"]
但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
var p = /java/g var str = 'javajavajaddd' p.exec(str) ["java", index: 0, input: "javajavajaddd"] p.exec(str) ["java", index: 4, input: "javajavajaddd"]