正则

(一)字符类

[...]  方括号内的任意字符

[^...]   不在方括号内的任意字符

.       除换行符和其它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个分组表达式匹配内容: /(['"])[^'"]*1/

(四)指定匹配位置

^  匹配字符串开头

$  匹配字符串结尾

   匹配单词边界

(五)修饰符

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"]
原文地址:https://www.cnblogs.com/webLilingyun/p/7220041.html