正则表达式
创建
严格区分大小写
构造函数
//var pattern = new RegExp("正则表达式内容","修饰符");
var pattern = new RegExp("abc","ig");
字面量
//var pattern = /正则表达式/修饰符;
var pattern=/adc/img;
修饰符
修饰符只能是g、i、m,可以省略
i
ignore case 忽略大小写
m
multiline 多行匹配(\n)
如果目标字符串中没有\n的话,m修饰符无意义
g
global 全词匹配
如果加了该修饰符,在匹配时会维护一个 lastIndex 的属性,用来记录当前匹配到这个字符串时的结束位置,下一次匹配时,会从lastIndex开始
如果没有g修饰符,lastIndex一直为0
原型方法
exec()
从参数获取目的字符串
参数:字符串
返回值:类数组对象[数组,index(匹配到的目标字符串的开始下标),input…]
var pattern = /abc/g;
var str="abc";
var result=pattern.exec(str);
console.log(result);//[ 'abc', index: 0, input: 'abc', groups: undefined ]
/abc/ :只匹配abc或者它的其他大小写状态
/abc(d|e)/ :匹配abcd或abce
const readline = require("readline-sync");
var pattern=/abc/i;
var str=readline.question("请输入你要检验的字符串");
console.log(pattern.exec(str));
test()
用来检测一个字符串是否匹配某个模式
参数:str
返回值:Boolean类型 true/false
var pattern =/abc/i;
var string ="hello 123 abcd";
//只要找到abc,不管后面是什么,找到就直接输出true
console.log(pattern.test(string));//true
toString()
参数:不需要传参
返回值:string
var pattern =/abc/i;// /abc/i
// var pattern = new RegExp("abc","m"); // /abc/m 一般这种时候调用toString
console.log(pattern.toString());
原型属性
属性 | 描述 |
---|---|
global | 是否开启了全局匹配 |
ignoreCase | 是否忽略大小写 |
multiline | 是否开启了多行匹配 |
source | 正则表达式的字符串 |
flags | 正则表达式的修饰符 |
var pattern =/abc/img;
console.log(pattern.global);//true
console.log(pattern.ignoreCase);//true
console.log(pattern.multiline);//true
console.log(pattern.source);//abc
console.log(pattern.flags);//gim
正则表达式规则
正则表达式不是js特有的,所有编程语言都可以用
字符类
符号 | 作用 |
---|---|
. | 用来匹配任意单个字符,行结束符除外 |
\d | 匹配任意的一个阿拉伯数字,等价于[0-9] |
\D | 匹配任意一个不是阿拉伯数字的字符,等价于[^0-9] |
\w | 匹配任意字母、数字、下划线,等价于[A-Za-z0-9] |
\W | 匹配任意不是字母、数字、下划线,等价于[^A-Za-z0-9] |
\s | 匹配空白符、空格、制表符、换行符、换页符和其他Unicode(\u00A0等) |
\S | 匹配一个非空白字符 |
\t | 匹配一个水平制表符(tab) |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\v | 匹配一个垂直制表符 |
\f | 匹配一个换页符 |
var pattern=/abc./g;//匹配以abc开头的四个字符的
var str="abcd abc abcc";
console.log(str.match(pattern));//[ 'abcd', 'abc ', 'abcc' ]
//匹配abc.
//var pattern=/abc./g;//[ 'abcd', 'abc.', 'abc.' ]
var pattern=/abc\./g;//[ 'abc.', 'abc.' ] 这里进行转义,这样就会只输出abc.
var str="abcd abc. abc.c";
console.log(str.match(pattern));
//匹配三个字符开头.结束
var pattern=/...\./g;
var str="abcd abc. a0c.c";
console.log(str.match(pattern));//[ 'abc.', 'a0c.' ]
字符集合
集合 | 描述 |
---|---|
[0-9] | 0-9 |
[A-Z] | A-Z |
[^A-Z] | 取反,匹配不包括在A-Z间的值 |
[012] | 只有012 |
{n} | 通过量词来设置一个内容出现的次数,如a{3}表示a正好出现三次 |
{m,n} | 出现m-n次 |
{m,} | m次以上 |
+ | 至少一个,相当于{1,} |
* | 0个或多个,相当于{0,} |
- | 0个或1个,相当于{0,1} |
// var pattern=/^(\d{4})-(\d{2})-(\d{2})$/g;
var pattern=/^[1-9]\d{3}-(0[1-9]|1[1-2]})-(0[0-9]|[1-2][0-9]|3[0-1])$/g;
var str="2021-09-01";
var str1="2021-31-01";
console.log(pattern.test(str));//true
console.log(pattern.test(str1));//false
var reg=/[ab]/;//[]里的内容也是或的关系
//var reg=/[a-z]/;//表示任意小写字母
var str='adob';
var result = reg.test(str);
console.log(result);//true
边界
字符 | 描述 |
---|---|
^ | 匹配输入开头 |
$ | 匹配输入结尾 |
var reg=/^p/;//检查字符串是否以p开头
var str='pk';
var result = reg.test(str);
console.log(result);//true
分组
|
// var reg=/a|b/;//检查一个字符串中是否有a或b,使用|表示或
var str='adob';
var result = reg.test(str);
console.log(result);//true
Javascript中 String对正则表达式的支持
match()
要使用正则表达式的全局修饰符g
调用者:string
参数:正则表达式
返回值:数组(匹配成功结果组成的数组)
//匹配三个字符开头.结束
var pattern=/...\./g;
var str="abcd abc. a0c.c";
console.log(str.match(pattern));//[ 'abc.', 'a0c.' ]
search()
调用者:string
参数:正则表达式,如果参数不是正则表达式,会先使用RegExp将其转为构造函数
不支持全局检索g
返回值:如果匹配成功,返回第一个匹配成功的值的索引位置;如果匹配不成功返回-1
var pattern=/...\./g;
var str="abcd abc. a0c.c";
console.log(str.search(pattern));//5
replace()
替换文本内容
调用者:string
参数:正则表达式,要替换的字符串
返回值:替换过后的文本(不改变 原字符串)
var text="javascript";
//将全小写的换成驼峰式
console.log(text.replace(/javascript/gi,"JavaScript"));//JavaScript
split()
可以将一个字符串拆分为一个数组
方法中可以传递一个正则表达式作为参数,这样方法将会根据正则表达式去拆分字符串
var str="1a2b3c4d5";
var result=str.split(/[A-z]/);//根据任意字母来拆分字符串
console.log(result);