匹配方法:
正则对象方法:test(), exec() (execute全称)
字符串方法: replace(), match()
js
const reg1 = /abc/g
const res1 = reg1.test('11abcde') //rest()查看是否匹配,返回true/false
console.log(res1)
const res2 = reg1.exec('bnabcdefg') //只会返回第一个匹配的index(数组的形式),没有匹配到返回null
console.log(res2)
const str1 = '学abc,来黑马abc'
const res3 = str1.replace(reg1,'java') //replace 敏感词替换
console.log(res3)
const str2 = '学abc,来黑马abc'
const res4 = str2.match(reg1) //
console.log(res4); // ["abc","abc"]
exec()的输出
replace()第二个参数也可以不写,相当于replace(reg, '')
修饰符:
i:忽视大小写
g:全局匹配
m: 匹配多行
js
// i: 忽视大小写
const reg = /a/i
console.log(reg.test('a')); //true
console.log(reg.test('ABC')); //true
//g: 全局匹配
const reg1 = /java/gi
const str = '学java,找黑马,java好,JAVA6'
console.log(str.replace(reg1,'前端'))
//m: 多行搜索 (Multiline)
const text = "Line 1\nLine 2\nLine 3";
const reg3 = /^Line 1/m; // 匹配 "Line 1"
console.log(reg3.test(text)); // true
元字符(边界符):
单词边界 \b
匹配cat,遇到wildcat不匹配
js
// 单词边界 \b
const text = "The wildcat is a cat."
// 1. 不使用 \b 的情况 (只匹配 "cat")
const regex1 = /cat/;
console.log(text.match(regex1)); // ["cat", index: 8, input: "...", groups: undefined] (只找到第一个 "cat")
console.log(text.match(/cat/g)); // ["cat", "cat"] (找到所有 "cat",包括 "wildcat" 中的 "cat")
// 2. 使用 \b 匹配完整的单词 "cat"
const regex2 = /\bcat\b/g; // /g 标志用于找到所有匹配
console.log(text.match(regex2)); // ["cat"] (只找到独立的 "cat")
字符串边界 ^ $
js
// 字符串边界 ^ $
const reg2 = /^a/ //以...开头
console.log(reg2.test('aa')) //true
console.log(reg2.test('baa')) //false
const reg3 = /c$/ //以...结尾
console.log(reg3.test('abc')) //true
console.log(reg3.test('bcd')) //false
const reg4 = /^a$/ //要求精确匹配
console.log(reg4.test('a')) //true
console.log(reg4.test('aaa'))//false
元字符(量词):
-
- 0次或多次
-
- 一次或多次
- ? 0次或1次
- {n} 只能有n次
- {n,} 大于等于n次
- {n,m} n~m次
javascript
const reg = /^a*$/
元字符(字符类):
js
// [] 中括号里面的任意一个
const reg = /[abc]/ //abc中的任意一个
const reg1 = /[a-z]/ //a-z 26个字母中任意一个
const reg2 = /[A-Z]/ //A-Z
const reg3 = /[0-9]/ //0-9数字中任意一个
const reg4 = /[a-zA-Z0-9]/
//[^] 取反 必须在[]内部,没有[]表示以xxx开头
const reg5 = /[^abc]/ //匹配abc之外的任意一个
//.匹配的除换行符之外的任意字符
const reg6 = /./
console.log(reg6.test('')) // false
console.log(reg6.test('\n')) // false
console.log(reg6.test('\r')) // false
// \r 将光标移到本行开头 (return) \n 换行(newline)
// 经常配合起来使用 windows中 \r\n表示回车并换行。
//预定义
const reg7 = /\d/ // \d -> [0-9]
const reg8 = /\D/ // \D -> [^0-9]
const reg9 = /\w/ // \w -> [a-zA-Z0-9_] 26个英文字母,数字,下划线
const reg10 = /\W/ // \W -> [^a-zA-Z0-9_] 取反
const reg11 = /\s/ //匹配空格(包括换行,空格,制表符) [\t\r\n\v\f]
const reg12 = /\S/ //取反
// \d (digit) \w (word) \s (whitespace)
// \t 水平制表符,用于对齐文本 \v 垂直制表符
分组和分支结构
js
// 分组,括号内的视为整体
const reg = /(ab)+/ //括号内的可重复
console.log(reg.test('ababab')) //true
console.log(reg.test('ababa')) //false
const reg2 = /^(\d{4})-(\d{2})-(\d{2})/
const date = '2023-01-05'
console.log(reg2.test(date))//true
const reg3 = /前端|java/ //包含前端或者java都能匹配成功
const str1 = '前端开始'
const str2 = 'java炒饭'
console.log(reg3.test(str1));