正则表达式

正则表达式

正则表达式(Regular Expressions)是用于模式匹配和文本处理的强大工具,vino中可以通过字面量来创建正则表达式对象。

正则表达式

语法

const regex = /expr/;

参数

  • expr: 正则表达式字符串

示例

//通过字面量创建正则表达式对象
let regex = /hello/

属性与方法

函数类型参数返回值说明
match方法str:stringboolean检查正则表达式是否匹配给定的字符串
find方法str:string,n?:intstring[]查找所有匹配的字符串,并返回结果数组
replace方法src:string,repl:string,startAt?:int,count?:intstring替换所有匹配的字符串

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 匹配 ab
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"))
更新时间 9/19/2024, 12:09:33 PM