图解正则:
常用示例
// 实现金钱格式化
var test1 = '1234567890'
var format = test1.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
console.log(format) // 1,234,567,890
相关概念:
正则 | 描述 | 正则 | 描述 |
---|---|---|---|
\v |
匹配垂直制表符 | \r |
匹配回车 |
\S |
匹配任何非空白字符 | \s |
匹配任何空白字符,等同于[\f\n\r\t\v]
|
\W |
等价于[a-zA-Z0-9] | \w |
匹配单词字符,等同于字符集合 [a-zA-Z0-9_]
|
\D |
除了数字之外的字符,等价于/[^0-9]/ | \d |
匹配数字,等价于[0-9] |
\f |
匹配换页符 | \n |
匹配换行符 |
. |
匹配除了换行符(\n)之外的任意单个字符 | \t |
匹配制表符 |
^ |
表示后边出现的数字必须在开头 | $ |
表示前面出现的数字必须出现在结尾 |
[] |
方括号内的任意字符 | [^] |
不在方括号内的任意字符 |
{} |
表示重复次数 | 单竖线 |
选择,匹配的是该选择符左侧或右侧的表达式 |
* |
表示出现零或多次,等同于{0,} | ? |
匹配前面一个字符0次或者1次,等同于{0, 1} |
+ |
表示出现一到多次,等同于{1,} |
/{n}/ //匹配前一项n次;
/\d{3}/ //表示三个数字
/{n, m}/ //表示n-m个字符;
/\d{3,8}/ //表示3-8个数字,eg: '1234567'
/\s/ //匹配一个空格,
/\s+/ //表示至少有一个空格eg: ' '
/[0-9a-zA-Z\_]/ //匹配一个数字、字母或者下划线
/[0-9a-zA-Z\_]+/ //匹配至少由一个数字、字母或者下划线组成的字符串;
eg: 'a100', '0_z', 'js2015'
/[a-zA-Z\_\$][0-9a-zA-Z\_\$]*/ //匹配由字母或下划线、$开头,后接任意个由一个数字、字母或者下划线、$组成的字符串;
/[a-zA-Z\_\$][0-9a-zA-Z\_\$]{0,19}/ //限制了变量的长度是1-20个字符;
/A|B/ //匹配A或B;
/[J|j]ava[S|s]cript/ //可以匹配'JavaScript' ,'Javascript', 'javaScript', 'javascript'
/^/ //表示行的开头;
/^\d/ //表示必须以数字开头
/$/ //表示行的结束;
/\d$/ //表示必须以数字结束
// '/g' 表示全局匹配;
var s = 'JavaScript, VBScript, JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;
// 使用全局匹配:
re.exec(s); // ['JavaScript']
re.lastIndex; // 10
re.exec(s); // ['VBScript']
re.lastIndex; // 20
re.exec(s); // ['JScript']
re.lastIndex; // 29
re.exec(s); // ['ECMAScript']
re.lastIndex; // 44
re.exec(s); // null,直到结束仍没有匹配到
字符类
将字符串单独放进方括号内就组成了字符类,匹配它所包含的任意字符
'abcdefg'.match(/[abc]/) // ["a"]
// 连字符匹配连续的字符范围
'abc'.match(/[a-z]/) // ["a"]
通过在左方括号插入^符号来否定字符类,匹配所有不包含在方括号内的字符
'abcdefg'.match(/[^abc]/) // ["d"]
正则创建方式:
// 方式一:
var re1 = /ABC\-001/
// 方式二:
var re2 = new RegExp('ABC\\-001')
RegExp的属性
一. source
只读字符串,包含正则表达式的文本
二. global
只读boolean类型,用以说明这个正则表达式是否带有修饰符g
三. ignoreCase
只读boolean类型,用以说明这个正则表达式是否带有修饰符i
四. multiline
只读boolean类型,用以说明这个正则表达式是否带有修饰符m
五. lastIndex
用来指定下一次匹配的起始索引
用于模式匹配的String方法
一. search(regexp)
返回第一个与之匹配的子串的起始位置,匹配不到则返回-1
'JavaScript'.search(/script/i); // 4
二. replace()
替换匹配到的值
var str = 'Twas the night before Xmas...';
var newstr = str.replace(/xmas/i, 'Christmas');
console.log(newstr); // Twas the night before Christmas...
三. match(regexp)
提取匹配的内容
var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);
console.log(matches_array);
// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
四. split()
通过指定的内容将字符串拆分成数组
'1, 2, 3, 4'.split(/\s*,\s*/); // ["1", "2", "3", "4"]
五. test()
一个在字符串中测试是否匹配的RegExp方法,它返回true或false。
/sales/.test('sales purchase') // true
正则例子:
- 原生js写法:
'a b c'.split(' ') // ['a', 'b', '', '', 'c']
- 正则写法:
'a b c'.split(/\s+/) // ['a', 'b', 'c']
- String的match方法:
"ab23839cd".match(/\d+/) // ["23839"],返回值为数组对象
待补充...