RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。
1. 语法
正则的语法 /keyword/
2. 修饰符
2-1. i
2-2. g
g全局替换,执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
var str = "hellLo";
console.log(str.replace(/l/ig,"*"));//he***o
3. 方括号
方括号用于查找某个范围内的字符:
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符。 |
[^abc] | 查找不在方括号之间的字符。 |
[0-9] | 查找 0 至 9 的数字。 |
[a-z] | 查找小写字符。 |
[A-Z] | 查找大写字符。 |
[A-z] | 查找大小写字符。 |
(red|blue|green) | 查找任何指定的选项。 |
3-1. [^0-9]
var str = "hello8289283921";
/* [0-9] */
var reg = /[0-9]/g;
console.log(str.replace(reg,"*"))//hello**********
3-2. [^0-9]
非数字字符
var str = "fdsfds12121dsf";
var reg = /[^0-9]/g;
console.log(str.replace(reg,""));//12121
3-3. 备选字符集
// 备选字符集: [海天] 特点:多选一
/* 定义:规定某一位字符的备选字符列表 */
var str = "上海,上天,上哪里去"; //"*"
var reg = /上[海天]/g
console.log(str.replace(reg,"*"))//*,*,上哪里去
// 上,天,那 规定某一位字符的备选字符列表
var reg =/[上天哪]/g
var str ="上海,哪里去,天";
console.log(str.replace(reg,"*"))//*海,*里去,*
3-4. |
或,没有“|”则连接为一个字符串
var str ="我去,我草,你这游戏打的太牛逼了,去草地里";
var reg = /我[去草]|牛逼/g
console.log(str.replace(reg,"*"))//*,*,你这游戏打的太*了,去草地里
4. 元字符
也叫预定义字符集:针对常用的备选字符集提供的简化符号
元字符(Metacharacter)是拥有特殊含义的字符:
元字符 | 描述 |
---|---|
. | 查找单个字符,除了换行和行结束符。 |
\w | 查找单词字符。同[0-9A-z_] |
\W | 查找非单词字符。 |
\d(digital) | 查找数字。 |
\D | 查找非数字字符。 |
\s(space) | 查找空白字符。 |
\S | 查找非空白字符。 |
4-1. \d , \w , .
/* \d [0-9] */
var str ="_jhfdl2323_";
var reg = /\d/g;
console.log(str.replace(reg,"*"))//_jhfdl****_
/* \w [0-9a-zA-Z_] */
/* . 所有的字符 */
console.log(str.replace(/\w/g,"*"))//***********
console.log(str.replace(/./g,"*"))//***********
5. 量词
匹配规定数量的字符串
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个 n 的字符串。>=1 |
n* | 匹配任何包含零个或多个 n 的字符串。>=0 |
n? | 匹配任何包含零个或一个 n 的字符串。0,1 |
n{X} | 匹配包含 X 个 n 的序列的字符串。x |
n{X,Y} | 匹配包含 X 至 Y 个 n 的序列的字符串。x~y |
n{X,} | 匹配包含至少 X 个 n 的序列的字符串。>=x |
n$ | 匹配任何结尾为 n 的字符串。 |
^n | 匹配任何开头为 n 的字符串。 |
?=n | 匹配任何其后紧接指定字符串 n 的字符串。 |
?!n | 匹配任何其后没有紧接指定字符串 n 的字符串。 |
5-1. {m,n}
只要大于m,test()结果都为true,所有不能限制最大数量
var pwd = "12115fdsfsd"; // 密码5-7num
var reg = /[0-9]{5,7}/;
console.log(reg.test(pwd));//true
5-2. 贪婪,懒惰模式
给量词的情况下 默认取最大值 默认是贪婪的 在后面加“?”,为懒惰模式,取最小值
var str = "2323hello";
var reg1 = /\d{3,6}?/;
var reg2 = /\d{3,6}/;
console.log(str1.replace(reg,"*"))//*3hello
console.log(str2.replace(reg,"*"))//*hello
5-3. \ 转义字符
处理特殊字符
var str = "https://www.baidu.com"
var s = "http://www.baidu.com"
var reg = /(https|http):\/\/[w]{3}\.baidu\.com/;
console.log(reg.test(s))
5-4. ^…$ 严格匹配
// 电话号码的正则
var reg = /^1[3-9]\d{9}$/;
var str = "13971181102";
console.log(reg.test(str))
5-5. ?,+,*
/*
? 0-1 {0,1}
+ 大于等于1个 {1,}
* {0,}
*/
var str = "hje1";
var reg =/\d+/
console.log(reg.test(str))
5-6.去除字符串前后空格
var str = " hello ";
var reg = /^\s+|\s+$/g;
var arr = [];
var res = str.replace(reg,"");
arr.push(res);
console.log(arr);//["hello"]
trim()
trim() 方法删除字符串两端的空白符:
var str = " hello ";
var arr = [];
arr.push(str.trim());
console.log(arr);
5-7. 过滤标签
/* 过滤标签*/
var str = "<p>我是</p>。<div>是</div>"
var reg =/<[^<>]+>/g;
console.log(str.replace(reg,""));
6. RegExp 对象方法
6-1. test()
检索字符串中指定的值。返回 true 或 false。
test() 方法用于检测一个字符串是否匹配某个模式.
RegExpObject.test(string)
string:要检测的字符串。
如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false。
// 规则字符串中字符出现规律的表达式
/* reg.test(str) */
var str = "hello";
var reg =/l/g;
console.log(str.replace(reg,"*"));//he**o
console.log(reg.test(str))//true
7. 支持正则表达式的 String 对象的方法
7-1. search()
7-2. match()
找到一个或多个正则表达式的匹配。
var str = "https://movie.douban.com/subject/1292052/";
/* 只获取数字 */
var reg = /\d+/;
/* match */
var res = str.match(reg);
console.log(res[0])
7-3. replace()
替换与正则表达式匹配的子串。
var str = "https://movie.douban.com/subject/1292052/";
/* 只获取数字 */
var reg = /[^\d]/g
console.log(str.replace(reg,""))
7-4. split()
把字符串分割为字符串数组。