1. 用途
有三个主要用途:
- 模式验证: 检测某个字符串是否符合规则
- 匹配读取: 将目标字符串中满足规则的部分读取出来
- 匹配替换: 将目标字符串中满足标准的部分替换为其他字符串
在线正则测试工具: http://tool.oschina.net/regex
2. 正则表达式创建
创建正则表达式对象
- 对象形式:var reg = new RegExp(“正则表达式”)。当正则表达式中有"/"那么就使用这种
- 直接量形式:var reg = /正则表达式/。一般使用这种声明方式
3. 正则表达式使用
- 简单使用
test方法: 用来查看正则表达式与指定的字符串是否匹配
var reg = /abc/; //new RegExp("abc")
var str = "abcdefg";
var flag = reg.test(str);
document.write(flag); // true
exec方法: 在一个指定字符串中执行一个搜索。匹配成功返回一个数组,匹配失败返回null
const reg = /abc/
const str = "abcdefg"
const arr = reg.exec(str)
console.log(arr) // ['abc', index: 0, input: 'abcdefg', groups: undefined]
- 全文匹配
var reg = /o/gi; // g表示匹配的模式,表示全文匹配;i表示忽略大小写匹配
var str = "abcohijOkl";
str = str.replace(reg, '_');
document.write(str); // abc_hij_kl
- 多行匹配
var reg = /hello$/m; // m表示多行匹配
var str = "hello\nworld";
var flag = reg.test(str);
document.write(flag); // true
4. 正则表达式的元字符
在正则表达式中被赋予特殊含义的字符,不能被直接当做普通字符使用。如果要匹配元字符本身,需要对元字符进行转义,转义的方式是在元字符前面加上“\”
代码:
- . 匹配除换行字符以外的任意字符
- \w匹配字母或数字或下划线,等价于[a-zA-Z0-9_]
- \W匹配任何非单词字符。等价于[^A-Za-z0-9_]
- \s匹配任意的空白符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]
- \S匹配任何非空白字符。等价于[^\f\n\r\t\v]
- \d匹配数字。等价于[0-9]
- \D匹配一个非数字字符。等价于[^0-9]
- \b匹配单词的开始和结束
^ 匹配字符串的开始,但在[]中使用表示取反
$ 匹配字符串的结束
示例1:
var reg = /\w/gm;
var str = "a>b_c|d\nf?g";
str = str.replace(reg, "A");
document.write(str);
// A>AAA|A
// A?A
示例2:
var reg = /\b/gm; // \b表示匹配单词的开始和结束
var str = "hello world";
str = str.replace(reg, "A");
document.write(str); // AhelloA AworldA
示例3:
var reg = /^a/im;
var str = "ahelloworldb";
str = str.replace(reg, "A");
document.write(str); // Ahelloworldb
5. 正则表达式字符集合
- [字符列表]。例如[abc]的含义:目标字符串包含abc中的任何一个字符
- [^字符列表] 例如[^abc]的含义:目标字符串包含abc以外的任何一个字符
- [字符范围]。例如[A-Z]含义:所有大写英文字符组成的字符列表
6. 正则表达式出现次数
代码:
- *: 出现零次或多次
- +: 出现一次或多次
- ?: 出现零次或一次
- {n}: 出现n次
- {n,}: 出现n次或多次
- {n,m}: 出现n到m次
示例1:
var reg = /[l]{2,4}/gi;
var str = "ablllhellowllllllorldc";
str = str.replace(reg, "_");
document.write(str); // ab_he_ow__orldc