正则表达式
- 创建方式
- 字面量
var reg = /abc/
- 构造方法
var reg = new RegExp('abc','igm')
var reg = /abc/m; var reg1 = new RegExp(reg) reg.abc = 123; console.log(reg1.abc)//undefined var reg = /abc/m; var reg1 = RegExp(reg) reg.abc = 123; console.log(reg1.abc)//123
- 字面量
- 修饰符
i 忽略大小写
g 全局匹配
m 执行多行匹配
// [A-z_] 匹配范围 // (abc|abd) 或 var reg = /a/g; var str = "abcdea"; console.log(str.match(reg));//["a","a"] var reg = /^a/g; var str = "abcdea"; console.log(str.match(reg));//["a"] var reg = /^a/g; var str = "abcde\na"; console.log(str.match(reg));//["a"] var reg = /^a/gm; var str = "abcde\na"; console.log(str.match(reg));//["a","a"]
- 元字符
. [^\r\n]
\w [0-9A-z_]
\W [^\w]
\d [0-9]
\D [^\d]
\s [\n\f\r\t\v ] 空白字符
\S [^\s]
\b 单词边界
\B 非单词边界
var reg = /\ba/g; var str = "abc dad cea"; str.match(reg);//["a"] abc中的a
\n [\n]换行符
\f 换页符
\r 回车符
\t [\t]制表符
\v 垂直制表符
\uxxxx Unicode字符
//匹配所有字符 var reg = /\d\D/;// /\s\S/ /\w\W/
- 量词(贪婪匹配原则)在量词后边添加?改为非贪婪匹配
n+ {1,infinity}
n* {0,infinity}
n? {0,1}
n{X} {X}
n{x,y} {x,y}
n{x,} {x,infinity}
?=n 匹配任何其后紧接指定字符n的字符串
?!n 匹配任何其后没有紧接指定字符n的字符串
var reg = /\w*/g; var str = 'abc'; str.match(reg);//['abc',''] var reg1 = /\d*/g; str.match(reg1);//['','','',''] var reg2 = /\w?/g; str.match(reg2);// ["a", "b", "c", ""] var reg3 = /\w{3}/g; var str1 = 'abcdefghi'; str1.match(reg3);// ["abc", "def", "ghi"] //正向预言 var reg4 = /a(?=b)/g; var str4 = 'aabaab'; str4.match(reg4);//["a", "a"] // 非贪婪匹配 var reg5 = /a{1,3}?/g; var str5 = 'aaaa'; str5.match(reg5);//["a", "a", "a", "a"]
- RegExp对象属性
reg.global 是否具有标志g
reg.ignoreCase 是否具有标志i
reg.lastIndex 整数,标示下一次匹配的字符位置
reg.multiline 是否具有标志
reg.source 匹配规则 双斜杠之间的内容
- RegExp对象方法
reg.test(str) 检索字符串中指定的值,返回true或false
reg.exec(str) 检索字符串中指定的值,返回找到的值,并确定其位置
() 当子表达式使用
var str = 'aabbaabbaabbaabbaabb'; var reg = /(\w)\1(\w)\2/g;// \1 表示复制第一个子表达式的内容 //有全局匹配规则时,每次查找都是从上一次匹配的 reg.lastIndex 的值之后开始查找,可以手动更改 reg.lastIndex 的值。 console.log(reg.exec(str));// ["aabb", "a", "b", index: 0, input: "aabb", groups: undefined] //连带子表达式的内容一起返回 console.log(reg.exec(str));// ["aabb", "a", "b", index: 4, input: "aabb", groups: undefined] //连带子表达式的内容一起返回 var reg1 = /b/g; console.log(reg1.exec(str));//["b", index: 2, input: "aabb", groups: undefined]
- 支持正则的String方法
str.match(reg)
var str = 'aabb'; var reg = /(\w)\1(\w)\2/; //当没有全局匹配,只匹配一个时,和exec返回一致; console.log(str.match(reg));// ["aabb", "a", "b", index: 0, input: "aabb", groups: undefined] //连带子表达式的内容一起返回 //有全局匹配规则时,返回的是所有结果组成的数组 var reg1 = /(\w)\1(\w)\2/g; console.log(str.match(reg));//["aabb"]
str.search(reg)
var str = 'aabb'; var reg = /(\w)\1(\w)\2/g; //返回第一个匹配成功的下标,没有则返回-1,与lastIndex无关 console.log(str.search(reg));//0
str.split(reg)
var str = 'dfsaf5fds2gsdg2adg1fdas'; var reg = /\d/g; console.log(str.split(reg));//["dfsaf", "fds", "gsdg", "adg", "fdas"] //不能使用子表达式的形式,会将子表达式的值一起返回 var reg1 = /(\d)/g; console.log(str.split(reg1));//["dfsaf", "5", "fds", "2", "gsdg", "2", "adg", "1", "fdas"]
str.replace(str1,str2) 当str1不是正则表达式并且没有全局匹配的时候只匹配第一个
var str = 'aa'; var reg = /a/g; console.log(str.replace('a','b'));//ba console.log(str.replace(reg,'b'));//bb //翻转字符串 var str1 = 'aabbaabbaabbaabb'; var reg1 = /(\w)\1(\w)\2/g; console.log(str1.replace(reg1,'$2$2$1$1'));// $1 表示第一个子表达式 console.log(str1.replace(reg1,function($, $1, $2){ //console.log($,$1,$2);//aabb a b return $2+$2+$1+$1; })) //the-first-name 转为小驼峰命名 var str2 = 'the-first-name'; var reg2 = /-(\w)/g; console.log(str2.replace(reg2,function($, $1){ return $1.toUpperCase(); })) //连续字符去重 var str3 = 'aaaaabbbbbbcccccddfaddbc'; var reg3 = /(\w)\1*/g; console.log(str3.replace(reg3,"$1"))//abcdfadbc //10000000 以 10.000.000 表示 var str4 = '10000000'; var reg4 = /(?=(\B)(\d{3})+$)/g; console.log(str4.replace(reg4,'.'));//10.000.000
- 常规字符串表达式
var ruleReg = /[a-zA-Z0-9\u4e00-\u9fa5]/
- 中文字符
var chineseReg = /[\u4e00-\u9fa5]]/