创建正则对象
可以通过构造函数或者字面量创建
构造函数:new RegExp('规则', '标识')
字面量: /规则/标识
let reg = new RegExp('a', 'ig');
console.log(reg.test('123yuabc')); // true
let reg2 = /a/i
console.log(reg2.test('123')); // false
标识
| 标识字符 | 含义 |
|---|---|
| i | 不区分大小写 |
| g | 全局匹配,如果没有此标识,只会匹配第一个 |
| m | 多行匹配 |
属性和方法
reg.test(str) 验证字符串是否满足规则
reg是正则对象
str是要验证的字符串
返回值:能匹配到返回 true ,否则返回 false
规则
详见:developer.mozilla.org/zh-CN/docs/…
字符匹配规则
| 规则书写 | 含义 |
|---|---|
直接书写一个普通字符 | 匹配书写的字符 |
[字符规则] | 匹配[]中出现的所有字符规则 |
[^字符串规则] | 匹配[]中没有出现的字符规则 |
. | 匹配任意字符 |
\d | 匹配数字,等价于 [0-9] |
\D | 匹配非数字 |
\s | 匹配空白字符,包括空格、回车、换行、制表 |
\S | 匹配所有非空白字符 |
\w | 匹配单词字符,等价于 [A-Za-z0-9_] |
\W | 匹配非单词字符,等价于 [^A-Za-z0-9_] |
^ | 匹配字符串开始,写到规则开始位置 |
$ | 匹配字符串结束,写到规则结束位置 |
\ | 匹配`` |
示例
// 1. 直接书写一个字符串, 匹配书写的字符
const regStr = /abc/ // 直接匹配 abc 字符串
console.log(regStr.test('13bca89 abc67ab')); // true
console.log(regStr.test('abac')); // false
// 2. [字符串规则], 匹配[]中出现的所有字符规则
const reg = /[123]/ // 匹配 1或者 2 或者 3, 注意不是匹配 123
console.log(reg.test('abc3')) // true
console.log(reg.test('23')); // true
const reg2 = /[0-9]/ // 匹配 0|1|2|3...|9
console.log(reg2.test('aa4')) // true
console.log(reg2.test('bc9')); // true
console.log(reg2.test('3')); // true
console.log(reg2.test('0')); // true
const reg3 = /[0-9a-zA-Z]/ // 匹配 0|1|2|3...|9 a|b..|z A|B...|Z
// 3. [^字符串规则] 匹配[]中没有出现的字符规则(相当于取反)
const reg3 = /[^a-z]/; // 表示匹配非小写字母
console.log(reg3.test('a')); // false
console.log(reg3.test('A')); // true
console.log(reg3.test('3')); // true
// 4. 点 . 匹配任意字符
const reg4 = /./
console.log(reg4.test('文字')) // true
console.log(reg4.test('a')) // true
console.log(reg4.test('4')); // true
// 问题来了 如果就是想匹配点呢 -- 需要转义
const reg41 = /./
console.log(reg41.test('文字')) // false
console.log(reg41.test('a')) // false
console.log(reg41.test('.')); // true
// 5. \d 匹配数字, 等价于[0-9]
const reg5 = /\d/
console.log(reg5.test('3')) // true
console.log(reg5.test('a')); // false
// 6. \D 匹配非数字
const reg6 = /\D/
console.log(reg6.test('3')) // false
console.log(reg6.test('a')); // true
console.log(reg6.test('-')); // true
console.log(reg6.test('汉')); // true
// 7. \s 匹配空白字符,包括空格、回车、换行、制表
const reg7 = /\s/
console.log(reg7.test(' ')) // true
console.log(reg7.test('a')); // false
console.log(reg7.test('3')); // false
// 8. \S 匹配所有非空白字符
const reg8 = /\S/
console.log(reg8.test(' ')) // false
console.log(reg8.test('a')); // true
console.log(reg8.test('3')); // true
// 9. \w 匹配单词字符,等价于 [A-Za-z0-9_]
const reg9 = /\S/g
console.log(reg9.test(' ')) // false
console.log(reg9.test('a')); // true
console.log(reg9.test('3')); // true
console.log(reg9.test('+')); // true
console.log(reg9.test('_')); // true
console.log(reg9.test('-')); // true
// 10. \W 匹配非单词字符,等价于 [^A-Za-z0-9_]
const reg10 = /\W/g
console.log(reg10.test(' ')) // true
console.log(reg10.test('a')); // false
console.log(reg10.test('3')); // false
console.log(reg10.test('+')); // true
console.log(reg10.test('_')); // false
console.log(reg10.test('-')); // true
// 11. ^ 匹配字符串开始、写到规则开始位置
const reg11 = /^\d/ // 表示匹配以数字开头
console.log(reg11.test('a12b')); // false
console.log(reg11.test('12b')); // true
console.log(reg11.test('a12')); // false
// 12. $ 匹配字符串结束, 写到规则结束位置
const reg12 = /\d$/ // 表示以数字结尾
console.log(reg12.test('a12b')); // false
console.log(reg12.test('12b')); // false
console.log(reg12.test('12')); // true
console.log(reg12.test('2')); // true
// 13. \ 匹配 \
const reg13 = /\/
console.log(reg13.test(`ab\ab`)); // true
console.log(reg13.test('12b')); // false
以上规则如果不加 g, 都是匹配单个字符串
连续的规则
多个规则可以连续书写,用以匹配多个字符,例如:
/\d[a-zA-Z]/ // 匹配以1个数字紧跟一个字母
若多个规则是或者的关系,使用|分割
/\d[a-zA-Z]|[a-zA-Z]\d/ // 匹配以1个数字紧跟一个字母,或者一个字母紧跟一个数字
规则的重复(量词)
一个或一段规则之后,可以紧跟一个量词,表示前面的规则出现的次数
/[a-zA-Z]\d{3}/ // 匹配1个字母,后面跟上连续的3个数字,{3}是量词,应用的规则是\d
/([a-zA-Z]\d){3}/ // {3}是量词,应用的规则是 [a-zA-Z]\d
| 量词 | 含义 |
|---|---|
{n} | 出现n次 |
{n, m} | 出现n-m次 |
{n,} | 至少出现n次 |
* | 出现0次或多次,等价于{0,} |
? | 出现0次或一次,等价于{0,1} |
+ | 出现1次或多次,等价于{1,} |
const text = `与啊啊adhu键啊哈哈一样桂以123566啊啊啊`
const newText = text.replace(/啊啊/g, function (s) {
return `<span>${s}</span>`;
});
console.log(newText) // 与<span>啊啊</span>adhu键啊哈哈一样桂以123566<span>啊啊</span>啊