正则表达式是在宿主环境下运行的,如 js / php / node.js 等
声明定义
字面量
* 使用 // 包裹
* 常用于静态创建正则表达式
var str = "Hello World";
var reg = /e/;
console.log(reg.test(str)); // true
// *中不能使用变量,可以使用 eval 将变量解析到正则中。 不推荐,存在变量时,使用对象形式创建
* eval 可能会导致浏览器插件(vue插件等)报 unsafe-eval 异常,不推荐使用**
var str = "Hello World";
var letter = "a";
var reg = `/${letter}/`;
console.log(eval(reg).test(str)); // false or "unsafe-eval error"
console.log(reg.test(str)); // error: reg.test is not a function
new RegExp()
* 常用于动态创建正则表达式
var str = "Hello World";
var letter = "o";
var reg = new RegExp(letter);
console.log(reg.test(str)); // true
修饰符
|
选择修饰符 左右两侧匹配一个即可
var str = "Hello World";
console.log(/a|b|c|d/.test(str)); // true
\
转义字符 用于改变字符的含义,适用于字符有多种语义
^
边界字符 必须以匹配字符串开始
var str = "www.baidu.com";
console.log(/^www/.test(str)); // true, 必须以 www 开头
$
边界字符 必须以匹配字符串结束,忽略换行符
var str = "www.baidu.com";
console.log(/com$/.test(str)); // true, 必须以 com 结尾
元子字符
元字符是正则表达式中的最小元素,只代表单一(一个)字符
元字符 | 说明 | 示例 |
---|---|---|
\d | 匹配任意一个数字 | [0-9] |
\D | 与除了数字以外的任何一个字符匹配 | [^0-9] |
\w | 与任意一个英文字母、数字或下划线匹配 | [a-zA-Z_] |
\W | 除了字母、数字或下划线外与任何字符匹配 | [^a-zA-Z_] |
\s | 任意一个空白字符匹配,如空格,制表符\t ,换行符\n |
[\n\f\r\t\v] |
\S | 除了空白符外任意一个字符匹配 | [^\n\f\r\t\v] |
. | 匹配除换行符外的任意字符 |
模式修饰
切换正则表达式的执行方式
** 放在 // 右侧外部使用
修饰符 | 说明 |
---|---|
i | 不区分大小写字母的匹配 |
g | 全局搜索所有匹配内容 |
m | 视为多行 |
s | 视为单行忽略换行符,使用. 可以匹配所有字符 |
y | 从 regexp.lastIndex 开始匹配 |
u | 正确处理四个字符的 UTF-16 编码 |
i
var str = "Hello World";
str = str.replace(/hello world/gi, "hello world");
console.log(str); // "hello world", 将 str 替换成小写
g
全局操作所有匹配的内容
var str = "aaa bbb";
str = str.replace(/a/, "b");
console.log(str); // "baa bbb", 只替换首个匹配的字符
str = str.replace(/a/g, "b");
console.log(str); // "bbb bbb", 替换所有匹配的字符
m
将内容视为多行匹配 主要用于修饰 ^ 和 $
原子表
原子表 | 说明 |
---|---|
[] | 中括号中任意字符匹配 |
[^] | 中括号中字符之外的任意字符匹配 |
[0-9] | 匹配 0-9 任何一个数字 |
[a-z] | 匹配 小写 a-z 任何一个字母 |
[A-Z] | 匹配 大写 A-Z 任何一个字母 |
* [0-9] 、[a-z]、[A-Z] 必须为升序,否则报错
var str = "Hello World1994";
// []
console.log(/[abc]/.test(str)); // false
console.log(/[abcd]/.test(str)); // true
// [^]
console.log(/[^o]/.test(str)); // true
console.log(/[^Hello World1994]/.test(str)); // false
// [0-9]
console.log(/[0-4]/.test(str)); // true
// [a-z]
console.log(/[a-z]/.test(str)); // true
// [A-Z]
console.log(/[A-G]/.test(str)); // false
原子组
一次匹配多个元子
原子组一次匹配多个元子,原子表一次匹配任意一个字符
** 元字符组