正则表达式
正则表达式
正则表达式(Regular Expressions)是用于模式匹配和文本处理的强大工具,vino
中可以通过字面量来创建正则表达式对象。
正则表达式
语法
const regex = /expr/;
参数
- expr: 正则表达式字符串
示例
//通过字面量创建正则表达式对象
let regex = /hello/
属性与方法
函数 | 类型 | 参数 | 返回值 | 说明 |
---|---|---|---|---|
match | 方法 | str:string | boolean | 检查正则表达式是否匹配给定的字符串 |
find | 方法 | str:string,n?:int | string[] | 查找所有匹配的字符串,并返回结果数组 |
replace | 方法 | src:string,repl:string,startAt?:int,count?:int | string | 替换所有匹配的字符串 |
match
检查正则表达式是否匹配给定的字符串
语法
match(str:string)
参数
- str 待匹配的字符串
示例
let r = /hello/
//打印: true
console.log(r.match("hello world"))
find
查找所有匹配的字符串,并返回结果数组
语法
find(str:string,n?:int)
参数
- str:string 待匹配的字符串
- n:int (可选) 要查找的匹配项的数量,默认:所有匹配项
示例
let r = /hello/
//打印: [hello,hello]
console.log(r.find("hello hello world"))
//打印: [hello]
console.log(r.find("hello hello world",1))
replace
替换所有匹配的字符串
语法
replaceAll(src:string,repl:string,startAt?:int,count?:int)
参数
- src:string 原字符串
- repl:string 替换字符串
- startAt:int 从第几个开始替换,
0
代表从第一个开始替换,默认:0
- count:int 替换几个。
-1
代表所有。默认:-1
示例
let r = /hello/
//打印: hi world hi
console.log(r.replace("hello world hello","hi"))
基本规则
- 普通字符:匹配自身。例如,
abc
匹配字符串abc
。
//打印: true
console.log(/abc/.match("abcdef"))
- 点号
.
:匹配任意单个字符(除了换行符)。
//打印: true
console.log(/a.c/.match("abcdef"))
- 字符集
[abc]
:匹配方括号中的任意一个字符。[a-z]
表示一个范围。
//打印: true
console.log(/[abc]/.match("a"))
//打印: false
console.log(/[abc]/.match("d"))
//打印: true
console.log(/[a-z]/.match("abcdasdf"))
//打印: false
console.log(/[a-z]/.match("123"))
- 排除字符集
[^abc]
:匹配不在方括号中的任意字符。
let r = /[^abc]/
//打印: true
console.log(r.match("d"))
//打印: false
console.log(r.match("a"))
- 重复
*
:匹配前一个字符零次或多次。a*
匹配零个或多个a
。
let r = /[a*]/
//打印: true
console.log(r.match("aaa"))
//打印: false
console.log(r.match("bbb"))
- 重复
+
:匹配前一个字符一次或多次。a+
匹配一个或多个a
。
let r = /a+/
//打印: true
console.log(r.match("aaa"))
//打印: false
console.log(r.match("bbb"))
- 重复
?
:匹配前一个字符零次或一次。a?
匹配零个或一个a
。
let r = /a?/
//打印: true
console.log(r.match("a"))
//打印: true
console.log(r.match("aa"))
//打印: true
console.log(r.match("b"))
- 重复
{n}
:匹配前一个字符恰好 n 次。a{3}
匹配三个a
。
let r = /a{3}/
//打印: true
console.log(r.match("aaa"))
//打印: true
console.log(r.match("aaaa"))
//打印: false
console.log(r.match("aa"))
- 重复
{n,m}
:匹配前一个字符至少 n 次,至多 m 次。a{3,5}
匹配三到五个a
。
let r = /a{3,5}/
//打印: true
console.log(r.match("aaa"))
//打印: true
console.log(r.match("aaaa"))
//打印: true
console.log(r.match("aaaaa"))
//打印: false
console.log(r.match("aa"))
- 开始
^
:匹配字符串的开头。
let r = /^hello/
//打印: true
console.log(r.match("hello world"))
//打印: false
console.log(r.match("world hello"))
- 结束
$
:匹配字符串的结尾。
let r = /world$/
//打印: true
console.log(r.match("hello world"))
//打印: false
console.log(r.match("world hello"))
- 非捕获组
(?:...)
: 匹配但不捕获该组
let r = /(?:abc)def/
//打印: true
console.log(r.match("abcdef"))
- 正向预查
(?=...)
: 仅当其后紧跟的是 ... 时才匹配
let r = /a(?=b)/
//打印: true
console.log(r.match("abc"))
- 负向预查
(?!...)
: 仅当其后不是 ... 时才匹配
let r = /a(?!b)/
//打印: true
console.log(r.match("ac"))
- 正向后发断言
(?<=...)
: 仅当其前面是 ... 时才匹配
let r = /(?<=a)b/
//打印: true
console.log(r.match("ab"))
- 负向后发断言
(?<!...)
: 仅当其前面不是 ... 时才匹配
let r = /(?<!a)b/
//打印: true
console.log(r.match("cb"))
- 反向引用
\k<name>
: 匹配之前命名的捕获组
let r = /(?<word>\w+)\k<word>/
//打印: true
console.log(r.match("hellohello"))
- 回溯引用
\n
: 匹配第 n 个捕获组
let r = /(abc)\1/
//打印: true
console.log(r.match("abcabc"))
- 选择
|
:匹配竖线两边的任意一个表达式。a|b
匹配a
或b
。
let r = /a|b/
//打印: true
console.log(r.match("a"))
//打印: true
console.log(r.match("b"))
//打印: false
console.log(r.match("c"))
特殊字符和转义
\d
:匹配一个数字字符,等价于[0-9]
。
let r = /\d/
//打印: true
console.log(r.match("123"))
//打印: false
console.log(r.match("abc"))
\D
:匹配一个非数字字符,等价于[^0-9]
。
let r = /\D/
//打印: false
console.log(r.match("123"))
//打印: true
console.log(r.match("abc"))
\w
:匹配一个字母或数字或下划线字符,等价于[a-zA-Z0-9_]
。
let r = /\w/
//打印: true
console.log(r.match("abc123"))
//打印: false
console.log(r.match("@#!"))
\W
:匹配一个非字母或数字或下划线字符,等价于[^a-zA-Z0-9_]
。
let r = /\W/
//打印: false
console.log(r.match("abc123"))
//打印: true
console.log(r.match("@#!"))
\s
:匹配一个空白字符,包括空格、制表符等,等价于[ \t\n\r\f\v]
。
let r = /\s/
//打印: true
console.log(r.match(" "))
//打印: true
console.log(r.match("\t"))
//打印: false
console.log(r.match("abc123"))
\S
:匹配一个非空白字符,等价于[^ \t\n\r\f\v]
。
let r = /\S/
//打印: false
console.log(r.match(" "))
//打印: false
console.log(r.match("\t"))
//打印: true
console.log(r.match("abc123"))
\b
:匹配一个单词边界。
let r = /\bword\b/
//打印: true
console.log(r.match("word"))
//打印: true
console.log(r.match("a word b"))
//打印: false
console.log(r.match("a words b"))
\B
:匹配一个非单词边界。
let r = /\Bword\B/
//打印: false
console.log(r.match("word"))
//打印: false
console.log(r.match("a word b"))
//打印: false
console.log(r.match("a words b"))
\\
:匹配反斜杠字符。
let r = /\\/
//打印: true
console.log(r.match("\\"))
//打印: false
console.log(r.match("a"))