正则表达式
https://www.w3school.com.cn/jsref/jsref_obj_regexp.asp
补充知识:
转义字符“\”
\n 回车 换行
\r 行结束符
\t tab
多行字符串
- RegExp 对象
正则表达式的作用:匹配特殊字符或有特殊搭配原则的字符的最佳选项
两种创建方式
- 直接量
var reg = /abc/
// 正则表达式bac
- new RegExp();
var reg = new RegExp("abc");
注意:
var reg = /abce/m;
var reg1 = new RegExp(reg); //返回的是新的一个正则表达式
var reg2 = RegExp(reg); // 不加new返回的是一个引用
- 属性:
- i :ignorecase忽视大小写
- g:执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
var reg = /ab/g;
var str = "abababababab";
//str.match(reg);
//(6) ["ab", "ab", "ab", "ab", "ab", "ab"]
- m:多行匹配
var reg = /^a/gm; // 以a为开头的字符串 “^”
var str = "abababab\nabab";
str.match(reg);
// (2) ["a", "a"]
-
方法:
reg.test()
str.math()’ -
表达式
方括号 :一个 [ ] 是一个表达式,代表1位,里面是他的区间
[abc] 查找方括号之间的任何字符。
var reg = /[1234567890][1234567890][1234567890]/g
var str = "123dsviul9745gdh456"
/*
str.match(reg)
(3) ["123", "974", "456"]
*/
[^]: ^ 放在里面表示“非”
(red|blue|green) 查找任何指定的选项。
var reg = /(abc|bcd)/g; //第一1位匹配abc或bcd
- 元字符
\w 就是word
\w === [0-9A-z_]
\W === [^\w]
\d === [0-9];
\D === [^d];
\s === [\t\n\r\v\f ]
\S === [^s];
\b 单词边界
\B 非单词边界
\n 查找换行符。
\f 查找换页符。
\r 查找回车符。
\t 查找制表符。
var reg= /\tc/g
var str = "_abc\tcde"
//必需是真是存在的/t
\v 查找垂直制表符。
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。(可以匹配汉字)
匹配所有
var reg= /[\d\D]/g;
查找单个字符,除了换行和行结束符。
. === [^\r\n]
- 量词
n+ {1,}
n* {0,}
n? {0,1}
n{X} {x}
n{X,Y} {x,y}
n{X,} {x,}
检验一个字符串两端是否含有数字
var reg = /^\d|\d$/g;
检验一个字符串两端是否都有数字
var reg = /^\d[\s\S]*\d$/g;
- RegExp 对象方法
compile 编译正则表达式。
exec 检索字符串中指定的值。返回找到的值,并确定其位置。
test 检索字符串中指定的值。返回 true 或 false。
lastindex :下一个匹配的位置
// 匹配xxxx
var reg = /(\w)\1\1\1/g // \1反向引用,多次匹配前面的表达式
// 匹配aabb
var reg = /(\w)\1(\w)\2/g
str.match(reg);
如果表达式中没有“g”显示详细的匹配信息,如上图所示。如果有“g”只显示匹配的个数
str.search(reg);
返回匹配的位置,如果没有匹配到就返回-1
str.replace()
var str = "abcdedfa";
var reg = /a/g
str.replace("a","b"); //只能返回一个
str.replace(reg,"b"); //匹配所有
// 将aabb变为bbaa
var str = "aabb"
var reg = /(\w)\1(\w)\2/g
console.log(str.replace(reg,'$2$2$1$1'));
console.log(str.replace(reg,function($,$1,$2){
return $2+$2+$1+$1;
}));
toUpperCase(); //变为大写
toLowerCase(); //变为小写
//将-word变为小驼峰式
var str = "the-first-name"
var reg = /-(\w)/g
console.log(str.replace(reg,function($,$1){
return $1.toUpperCase();
}))
正向欲查 正向断言
//正向欲查 正向断言
var str = "abaaaa";
var reg = /a(?=b)/g //筛选出a之后有b的那个a
var reg = /a(?!b)/g //筛选出a之后没有b的那个a
//str.match(reg) ["a"]
在“+”……之后加上“?”就变成了非贪婪匹配
//去重
var str = "aaaaaaaaaabbbbbccc"
var reg = /(\w)\1*/g
console.log(str.replace(reg,"$1"));
var str = "100000000" //变为100,000,000
var reg = /(?=(\B)(\d{3})+$)/g //(\d{3})+ 三的倍数个
console.log(str.replace(reg,"."));