RegExp(regular expression)
- 正则表达式的作用: 字符串模式匹配
两种创建方式 :
1. 直接量
2. new RegExp();
修饰符
i – ignoreCase --> 执行对大小写不敏感的匹配
g – global --> 执行全局匹配(查找所有匹配而非找到第一个匹配后即停止)
m – multiline --> 执行多行匹配
var reg1 = /^a/gm;//^a表示以a开头的a,查找所有以a开头的字符
var str = "aab12";
console.log(str.match(reg1));// ['a']
var str1 = 'a\na'
console.log(str1.match(reg1));// ['a', 'a']
var reg2 = /[^a][^b][^c]/g;//第一位不是a,第二位不是b,第三位不是c
var str2 = 'abbsc2c2aec';
console.log(str2.match(reg2));// ['sc2', 'c2a']
元字符
\w === [0-9A-z_]
\W === [^\w]
\d === [0-9]
\D === [^\d]
var reg = /\w\d/;
var str = 'a9aa';
console.log(str.match(reg));// ['a9']
\s === [\t\n\r\v\f]
\S === [^\s]
\b === 单词边界
\B === [^\b]
var reg = /\bcde\b/;
var str = 'abc cde cdee h';
console.log(str.match(reg));// ['cde']
\u --> Unicode编码,能匹配汉字
量词
n+ --> 可以出现1, 次
n* --> 可以出现0, 次
n? --> 可以出现0,1次
n{X} --> 匹配X个
n{x,y} --> 匹配x到y个(由多到少的原则)
var str = 'abc';
var reg = /\w+/;
console.log(str.match(reg));// ['abc']
var reg1 = /\w*/g;
console.log(str.match(reg1));// ['abc', '']
var reg2 = /\w?/g;
console.log(str.match(reg2));// ['a', 'b', 'c', '']
var reg3 = /\w{2}/g;
console.log(str.match(reg3));// ['ab']
var str1 = 'aaaaaaaed';
console.log(str1.match(reg4));// ['aaaaa', 'aaed']
var reg5 = /ed$/g;//以d结尾前面跟着e
console.log(str1.match(reg5));// ['ed']
\1 --> copy一个和第一个子表达式一模一样的,\2以此类推
var reg = /(\w)\1\1\1/g;
var str = 'aaaabbbb';
console.log(str.match(reg));// ['aaaa', 'bbbb']
var reg = /(\w)\1(\w)\2/g;
var str = 'aabb';
console.log(str.match(reg));// ['aabb']
RegExp对象方法
- exec() --> 检索字符串中指定的值并返回其位置index
- test()
支持正则表达式的String对象的方法
- search() --> 返回正则表达式第一次匹配的位置index
var reg = /aabb/g;
var str = 'aecaabbaabb';
console.log(str.search(reg));// 3
var str1 = 'abc';
console.log(str1.search(reg));// -1
- match()
- replace()
var reg = /a/g;
var str = 'aabb';
console.log(str.replace('a', 'b'));// babb //非正则表达式,没有全局匹配的功能
console.log(str.replace(reg, 'b'));// bbbb
var reg1 = /(\w)\1(\w)\2/;
console.log(str.replace(reg1, function($, $1, $2){
return $2 + $2 + $1 +$1;
}))// bbaa //实现倒转
var reg = /(\w)\1+/g;
var str = 'aaaaaabbbbbbbc';
console.log(str.replace(reg, '$1'));// abc
- split() --> 把字符串分割为字符串数组
str.toUpperCase() --> 变大写
str.toLowerCase() --> 变小写
var reg = /-(\w)/g;
var str = 'the-first-name';
//将 the-first-name 替换为 theFirstName
console.log(str.replace(reg, function($, $1){
return $1.toUpperCase();
}))
?= --> ?=后面为限制条件
//正向预查
var reg = /a(?=\d)/g;// 匹配a其后为数字的a
var str = 'aa0a';
console.log(str.match(reg));// a
//非正向预查
var reg = /a(?!\d)/g;// 匹配a其后不为数字的a
var str = 'aa0a';
console.log(str.match(reg));// ['a', 'a']
- 一般情况下正则表达式都是贪婪匹配,遵循能多则不少的原则,用?可打破规则
var reg = /a{2,3}?/g;
var str = 'aaaaa';
console.log(str.match(reg));// ['aa', 'aa']
var reg1 = /a??/g;// 取0-1个,能取0个则不取1个
console.log(str.match(reg1));// ['', '', '', '', '', '']
//百度试题
var str = '100000000';
//将 100000000 改写为 100,000,000
var reg = /(\d)\d(\d)(?=\d)/g;
console.log(str.replace(reg, '$1$2$2,'));
console.log(str.match(/\d{1,3}/g).join(','));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。