一、语法
正则表达式是一种微型语言。正则表达式创建有两种,一种字面量创建 一种是实例化创建
let reg= / 正则内容(a) / 修饰符 (g)
正则表达式创建有两种,一种字面量创建 一种是实例化创建
1.字面量创建------是最简便的方式
let reg=/a/g;
2.实例化创建------可以创建具有变量的正则表达式
let reg1=new RegExp("a","g")
二、修饰符
用于区分大小写和全局匹配
修饰符 | 作用 |
i | 不区分大小写 |
g | 全局匹配 |
m | 执行多行匹配 |
示例代码:
var str = "abAc";
str = str.replace("a", "0")
console.log(str);
str = str.replace(/a/, "0")
console.log(str);
str = str.replace(/a/g, "0")
console.log(str);
str = str.replace(/a/gi, "0")
console.log(str);
结果如下:
三、正则表达式API----对象属性
var reg=/a/gim;
test 判断当前字符串中是否有满足该正则的匹配内容 返回布尔值
console.log(reg.test("aa"));
在字符串中查找满足匹配正则表达式的内容,返回数组,数组有对应的属性
console.log(reg.exec("aa"));
console.log(reg.flags);//修饰符
console.log(reg.source);//正则内容
console.log(reg.global);//g --- 判断是否设置了 "g" 修饰符
console.log(reg.ignoreCase);//i --- 判断是否设置了 "i" 修饰符
console.log(reg.lastIndex);//最后一次查找的下标
console.log(reg.dotAll);
console.log(reg.multiline);//m --判断是否设置了 "m" 修饰符
console.log(reg.sticky);//粘性
console.log(reg.unicode);//编码
四、元字符
元字符 是拥有特殊含义的字符
元字符 | 描述 |
查找单个字符,除了换行和行结束符。 | |
查找数字、字母及下划线。 | |
查找非单词字符。 | |
查找数字。 | |
查找非数字字符。 | |
查找空白字符。 | |
查找非空白字符。 | |
匹配单词边界。 | |
匹配非单词边界。 | |
\0 | 查找 NULL 字符。 |
查找换行符。 | |
\f | 查找换页符。 |
\r | 查找回车符。 |
\t | 查找制表符。 |
\v | 查找垂直制表符。 |
查找以八进制数 xxx 规定的字符。 | |
查找以十六进制数 dd 规定的字符。 | |
查找以十六进制数 xxxx 规定的 Unicode 字符。 |
五、方括号
方括号用于查找某个范围内的字符
表达式 | 描述 |
查找方括号之间的任何字符。 | |
查找任何不在方括号之间的字符。 | |
[0-9] | 查找任何从 0 至 9 的数字。 |
[a-z] | 查找任何从小写 a 到小写 z 的字符。 |
[A-Z] | 查找任何从大写 A 到大写 Z 的字符。 |
[A-z] | 查找任何从大写 A 到小写 z 的字符。 |
[adgk] | 查找给定集合内的任何字符。 |
[^adgk] | 查找给定集合外的任何字符。 |
(red|blue|green) | 查找任何指定的选项。 |
列举一些-------方括号和元字符表达相同含义
表达式 元字符 含义
/[a-zA-Z0-9_]/ \w 小写字母大写字母数字下划线
/[^a-zA-Z0-9_]/ \W 除了小写字母大写字母数字下划线
[0-9] \d 代表所有数字
[^0-9] \D 代表除了所有数字
[^ab] 在中括号的最前面使用了^ 代表除了[ ]上箭头后面的所有内容以外满足就可以了 不要ab
[^\^] 除了^ 以外的字符
[a^c] 如果^不在第一位则表示正常的^字符
六、量词
量词 | 描述 |
匹配任何包含至少一个 n 的字符串。 例如,/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"。 | |
匹配任何包含零个或多个 n 的字符串。 例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。 | |
匹配任何包含零个或一个 n 的字符串。 例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。 | |
匹配包含 X 个 n 的序列的字符串。 例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的两个 "a",且匹配 "caaandy." 中的前两个 "a"。 | |
X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。 例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。 | |
X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。 例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的两个 "a",匹配 "caaaaaaandy" 中的前面三个 "a"。注意,当匹配 "caaaaaaandy" 时,即使原始字符串拥有更多的 "a",匹配项也是 "aaa"。 | |
匹配任何结尾为 n 的字符串。 | |
匹配任何开头为 n 的字符串。 | |
匹配任何其后紧接指定字符串 n 的字符串。 | |
匹配任何其后没有紧接指定字符串 n 的字符串。 |
七、对象及方法
1.正则表达式本身有的方法
方法 | 描述 |
在 1.5 版本中已废弃。 编译正则表达式。 | |
检索字符串中指定的值。返回找到的值,并确定其位置。 | |
检索字符串中指定的值。返回 true 或 false。 | |
返回正则表达式的字符串。 |
代码示例:
1.exec()
如果匹配失败,exec() 方法返回null,并将正则表达式的 lastIndex 重置为 0。
如果匹配成功,exec() 方法返回一个数组,并更新正则表达式对象的lastIndex属性。完全匹配成功的文本将作为返回数组的第一项,从第二项起,后续每项都对应一个匹配的捕获组。
得到的数组还具有以下额外的属性:
index: 匹配到的字符位于原始字符串的基于 0 的索引值。
input:匹配的原始字符串。
group:一个命名捕获组对象,其键是名称,值是捕获组。若没有定义命名捕获组,则 groups 的值为 undefined。
1.exec----在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null。
//exec 和test使用全局查找时相同
var reg = /a/g;
console.log(reg.exec("cdabac"));//每调用一次该对象方法,就查找一次a
console.log(reg.exec("cdabac"));
//没有查找到返回null
console.log(reg.exec("cdabac"));//最后一次没有查找到,就返回null
2.test()
如果正则表达式与指定的字符串匹配,返回true;否则false。
设置全局标志的正则,采用test()
当使用全局匹配时
var reg = /a/g;
在使用test匹配正则时,使用了全局匹配,第一次找到第一个满足条件的,
并且将这个位置的下标记录在正则中。第二次匹配时根据上次记录的下标继续向后匹配查找
直到查找不到返回false,则从下标0开始重新查找
console.log(reg.test("cdabac"));
console.log(reg.lastIndex);
console.log(reg.test("cdabac"));
console.log(reg.lastIndex);
console.log(reg.test("cdabac"));
console.log(reg.lastIndex);
console.log(reg.test("cdabac"));
console.log(reg.test("cdabac"));
console.log(reg.test("cdabac"));
//每次都会创建一个新的正则表达式查找
console.log(/a/g.test("cdabac"));
console.log(/a/g.test("cdabac"));
console.log(/a/g.test("cdabac"));
console.log(/a/g.test("cdabac"));
console.log(/a/g.test("cdabac"));
if (str === "a" || str === "b")
/a|b/.test(str)
3.toString()
对象覆盖了 Object 对象的 toString() 方法,并没有继承 Object.prototype.toString()。
对于 RegExp 对象,toString 方法返回一个该正则表达式的字符串形式。
2.字符串String的方法中可以使用正则表达式的
方法 | 描述 |
检索与正则表达式相匹配的值。 | |
找到一个或多个正则表达式的匹配。 | |
matchAll | |
替换与正则表达式匹配的子串。 | |
replaceAll | |
把字符串分割为字符串数组。 |
示例代码:
1.search()
1.search
search 与indexOf类似
如果匹配成功,则返回正则表达式在字符串中首次匹配的索引;否则,返回 -1。
var str="abac";
console.log(str.search("a"));
console.log(str.search(/a/g));
console.log(str.search(/a/g));
var reg=/a/g;
console.log(str.search(reg));
var str="babd";
console.log(str.search(/.a/g));
console.log(str.search(/ac/g));
2.match()
2.str.match
如果不使用g全局匹配类似于exec方法
如果使用g全局匹配则会被所有匹配的结果放在一个数组中
str = "abcacd";
reg = /a../;
reg1 = /a../g;
console.log("abcacd".match(/a../));
console.log("abcacd".match(/a../g));
console.log(reg.exec(str));
console.log(reg1.exec(str));
match结果:
exec结果:
3.matchAll()
console.log("abcacd".matchAll(/a../g));
3.str.matchAll
matchAll返回一个迭代器,使用for of遍历这个迭代器可以看到多次使用exec的结果
for(var value of "abcacd".matchAll(/a../g)){
console.log(value);
}
4.replace()
4.replace
var str = "abcacd";
console.log(str.replace("a", "0"));
console.log(str.replace(/a/, "0"));
console.log(str.replace(/a/g, "0"));
str = str.replace(/a../g, function(item, index, s) {
// console.log(item,index,s);
// return "0bc"
// 如果下标是3返回”000“
if (index === 3) return "000";
// 否则返回原查找到字符
return item;
})
console.log(str);
5.replaceAll()
5.replaceAll
var str = "abac";
str = str.replaceAll(/a./g, "a0");
str = str.replaceAll(/a./g, function(item) {
console.log(item);
});
str = str.replaceAll("a", "0")
console.log(str);
6.split()
6.split
var str="ab|cd|ef&aa&cc";
console.log(str.split("|"));
部分字符在正则表达式中有自己的含义,为了恢复这个字符串本身的字符需要再前面加上\ 转义
1. \| 这个是字符 |
2. | 是或者的意思
3. & 就是字符&
console.log(str.split(/\||&/));
var str="aca.ad";
console.log(str.match(/a\./g));
7.删除字符串中空格
console.log(str.trim());//删除字符串前后空格
console.log(str.trimLeft());//删除字符串前空格
console.log(str.trimRight());//删除字符串前空格
八、结语
最近要被Js搞懵了,总结不易,留下你的脚步吧~