/abc(d)/.exec(‘abcd’) // [“abcd”, “d”, index: 0, input: “abcd”]
此数组还有另外两个参数,input是输入的字符串,index表示匹配成功的序列在输入字符串中的索引位置
如果有全局参数(g),第二次匹配时将从上次匹配结束时继续
var r1 = /ab/
r1.exec(‘ababab’) // [‘ab’, index: 0]
r1.exec(‘ababab’) // [‘ab’, index: 0]
var r2 = /ab/g
r2.exec(‘ababab’) // [‘ab’, index: 0]
r2.exec(‘ababab’) // [‘ab’, index: 2]
r2.exec(‘ababab’) // [‘ab’, index: 4]
这一特性可以被用于循环匹配,比如统计字符串中abc的次数
var reg = /abc/g
var str = ‘abcabcabcabcabc’
var num = 0;
var match = null;
while((match = reg.exec(str)) !== null) {
num++
}
console.log(num) // 5
search() 方法使用表达式来搜索匹配,然后返回匹配的位置。
var str = “Visit W3School”;
var n = str.search(/w3school/i); //6
replace() 方法返回模式被替换处修改后的字符串。
replace([RegExp|String],[String|Function])
var str = “Visit Microsoft!”;
var res = str.replace(/microsoft/i, “W3School”); //Visit W3School!
其第一个参数可以是正则表达式,如果想全局替换需添加全局参数
‘abc’.replace(/[abc]/, ‘y’) // ybc
‘abc’.replace(/[abc]/g, ‘y’) // yyy 全局替换
在第二个参数中,也可以引用前面匹配的结果
‘abc’.replace(/a/, ‘$&b’) // abbc KaTeX parse error: Expected 'EOF', got '&' at position 1: &̲ 引用前面的匹配字符 ,'&b’-‘ab’
‘abc’.replace(/(a)b/, ‘$1a’) // aac &n 引用前面匹配字符的分组,‘$1a’-‘aa’
‘abc’.replace(/b/, ‘$’‘) // aac ‘ 引用匹配字符前面的字符 , ′ ` 引用匹配字符前面的字符, ' ‘引用匹配字符前面的字符,′`’-‘a’
‘abc’.replace(/b/, “$'”) // acc ′ 引用匹配字符后面的字符 , " ' 引用匹配字符后面的字符," ′引用匹配字符后面的字符,"’ "-“c”
如果第2个参数是回调函数,每匹配到一个结果就回调一次,每次回调都会传递以下参数
result: 本次匹配到的结果
$1,…$9: 正则表达式中有几个(),就会传递几个参数,$1~$9分别代表本次匹配中每个()提取的结果,最多9个
offset:记录本次匹配的开始位置
source:接受匹配的原始字符串
‘abc’.replace(/\w/g, function (match, $1, $2) {
return match + ‘-’
})
// a-b-c-
match()方法也会返回匹配的结果,匹配结果和exec类似
‘abc’.match(/abc/) // [‘abc’, index: 0, input: abc]
‘abc’.match(/abd/) // null
如果有全局参数(g),match会返回所有的结果,并且没有index和input属性
‘abcabcabc’.match(/abc/g) // [‘abc’, ‘abc’, ‘abc’]
split()方法使用正则,可以用指定符号分隔字符串,并返回数据
‘a,b.c’.split(/,|./) // [a, b, c]
3.修饰符:像 /microsoft/i,斜杠外面的i
g正则遇到第一个匹配的字符就会结束,加上全局修复符,可以让其匹配到结束
i正则默认是区分大小写的,i可以忽略大小写
m正则默认情况下,^和匹配行首和行尾,不理解就看例子
/jing$/ // 能够匹配 'yanhaijing,不能匹配 ‘yanhaijing\n’
/jing$/m // 能够匹配 'yanhaijing, 能够匹配 ‘yanhaijing\n’
/^jing/ // 能够匹配 ‘jing’,不能匹配 ‘\njing’
/^jing/m // 能够匹配 ‘jing’,能够匹配 ‘\njing’
4.括号表达式
()、[]、{} 的区别
() 的作用是提取匹配的字符串。表达式中有几个()就会得到几个相应的匹配字符串。比如 (\s+) 表示连续空格的字符串。
[]是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示字符文本要匹配英文字符和数字。
{}一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s[1,3]表示匹配1~3个空格。
5.元字符(Metacharacter)是拥有特殊含义的字符
. 匹配除了换行符(\n)以外的任意一个字符 = [^\n]
\w = [0-9a-zA-Z_]
\W = [^0-9a-zA-Z_]
\s = [ \t\n\v]
\S = [^ \t\n\v]
\d = [0-9]
\D = [^0-9]
^在[]外表示匹配开头的意思
^abc // 可以匹配abc,但是不能匹配aabc
$表示匹配结尾的意思
abc$ // 可以匹配abc,但是不能匹配abcc
上面提到的\b表示单词的边界