正则的创建
字面量创建
var reg = /hello/;
直接实例化
var reg = new RegExp('hello');//需要加单双引号,但是不要加//
正则的修饰符
在创建的时候加入,例:
let reg = /hello/g; //匹配全局hello
let reg1 = /Hello/i; //匹配时不区分大小写
let obj = new RegExp('js','g');
标志说明: i:忽略大小写 g:全局匹配 gi:全局匹配+忽略大小写
正则对象调用
test()方法 - 判断正则表达式是否匹配成功
let str = '难道你就是那万中无一的绝世高手?';
let obj = /万中无一/;
let ret = obj.test(str);
document.write(ret);//通过正则返回true 否则返回false
exec方法 - 匹配符合正则表达式条件的数据(需要加入全局修饰符)
let str = '阿强爱上了阿珍,在淅沥沥的雨中,阿强爱上了阿珍';
let obj = /阿强/g;
//document.write(obj.exec(str));//单个调用
let arr;
while(row = obj.exec(str)) {//循环调用
document.write(arr);
}
在字符串中使用正则
search() 方法
用于搜索字符串中指定的元素,返回符合条件的第一个元素下标,没找到返回-1 不能使用修饰符
例:
let str = "I have a dream!";
console.log(str.search(/dream/));
match()方法
用于匹配符合条件的内容,返回一个数组
例:
var str="It is at our mother“s knee that we acquire our noblest and truest and highest , but there is seldom any money in them";
console.log(str.match(/is/g));
replace() 方法
用于替换字符串中的数据,返回新的字符串
例:
let str = '你是要我打你还是要我打tm啊?!你搞得我好乱啊!';
console.log(str.replace(/我/g, ‘周星星’));
更复杂的正则表达式
正则字符类
元字符 | 说明 |
---|---|
[a-z] | 匹配a-z任意一个字符 |
[A-Z] | 匹配A-Z任意一个字符 |
[a-zA-Z] | 匹配26个英文字母(大小写) |
[0-9] | 匹配一个数字 |
[0-9a-zA-Z_] | 匹配一个字符可以是数字、字母和下划线 |
[^0-9] | 匹配非数字 |
[^a-zA-Z] | 匹配非字母 |
常用字符类
元字符 | 说明 |
---|---|
\d | 匹配数字相当于 [0-9] |
\D | 匹配任意非数字的字符 [^0-9] |
\w | 匹配字母或数字或下划线 [0-9a-zA-Z_] |
\W | 匹配任意不是字母,数字,下划线 [^0-9a-zA-Z_] |
\s | 匹配任意的空白符 |
\S | 匹配任意不是空白符的字符 |
. | 匹配除换行符以外的任意单个字符 |
^ | 表示匹配行首的文本(以谁开始) |
$ | 表示匹配行尾的文本(以谁结束) |
重复字符
限定符 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次,最少出现n次 |
{n,m} | 重复n到m次 |
[] | 匹配字符组内的字符 [abc] |
( str1 l str2 ) | 匹配字符串str1或者str2 |
常用定位符
^ 限定行首数据,以....开头 $ 限定行尾数据,以...结尾
例1:检测是否包含数字的正则
let reg = /[0-9]/;
let reg = /\d/
例2:检测重复字符
let reg = /8*/; // 可以有8也可以没有
let reg1 = /8?/ //8最多出现一次
let reg2 = /8+/ //8最少出现一次
let reg3 = /8{6}/ // 8 出现6次
let reg4 = /8{6,10}/ // 8最少6次最多10次
let reg5 = /8{3,}/ // 最少3次