RegExp正则
[[toc]]
正则方法
reg.test(str)
reg.exec(str)
str.match(reg) str.replace( reg ,""替换成什么 | callback(替换成什么))
|
正则的修饰符、元字符
量词元字符
常用指令 |
描述 |
\n |
在js中表示换行 |
* |
表示出现0次到多次 |
? |
表示出现0次或1次 |
+ |
表示至少出现一次 |
{n} |
表示出现n次 |
{n,} |
表示至少出现n次 |
{n,m} |
最小是n,最大是m,(n,m都是一个非负整数 |
中文的范围:[ \u4e00 - \u9fa5 ]
(记忆:有事100,有酒罚我)
修饰符有三种
修饰符 |
说明 |
i |
忽略大小写匹配 |
g |
全局匹配,即是匹配一个后继续匹配,直到结束 |
m |
多行匹配,即是遇到换行后不停止匹配,直到结束 |
特殊元字符
字符 |
说明 |
\d |
匹配0-9中任意一个数字 |
\D |
除了0-9以外的任意一个字符 |
\w |
数字、字母、下划线中任意一个字符 |
\W |
除了数字、字母、下划线以外任意一个字符 |
\s |
匹配一个空白符(空格;制表符(tab)\t ;\n换行符 ;\r回车…) |
\S |
除了空白符以外任意一个字符 |
\b |
匹配单词边界(边界字母和非字母连接的地方) |
\n |
匹配一个换行符 |
. |
除换行符\n以外任意一个字符 |
\ |
转义符,把有特殊意义的字符转义为普通字符 |
^ |
(读作caret)表示以某个元字符开头 |
$ |
表示以某个元字符结尾 |
x|y |
表示x/y中任意一个 |
[] |
表示匹配[ ]中任意一个字符 |
[xyz] |
表示x/y/z中任意一个 |
[a-z] |
表示匹配a-z中的任意一个小写字母 |
[A-Z] |
表示匹配A-Z中的任意一个大写字母 |
[0-9] |
表示匹配0-9中的任意一个数字,等价于\d |
[^abc] |
表示除了a、b、c以外的任意一个字符 |
() |
正则分组 |
(?: ) |
表示当前分组只匹配不捕获(取消分组捕获) |
(?=) |
正向预查 |
(?!) |
负向预查 |
正向预查、负向预查
let reg1 = /x(?=y)/ let reg2 = /x(?!y)/
|
构造函数方式
var reg = new RegExp('\d', 'gi');
|
字面量方式
两个斜线内为正则的内容,后面可以跟修饰符,与第一种构造函数方式相比更简洁,缺点是正则内容不能拼接
.
'aBcd efg'.match(/[a-z]+/); 'aBcd efg'.match(/[a-z]+/i); 'aBcd efg'.match(/[a-z]+/g); 'aBcd efg'.match(/[a-z]+/gi); 'aB\ncd\n efg'.match(/^[a-z]+/m); 'aB\ncd\n efg'.match(/^[a-z]+/g); 'aB\ncd\n efg'.match(/^[a-z]+/gm);
|
示例
js正则删除行内块之间的空格
let rep = function (match, item1, item2, item3) { return item1 + item3 } let source = template.content.replace(/(>)(\s*)(<)/g, rep);
|
手机号*过滤
'123567905849'.replace(/^(\d{3})(\d*?)(\d{4})$/, '$1****$3') '123567905849'.substr(0, 3) + '****' + '123567905849'.substr(7, 11)
|
用正则写一个验证23-68中的数字
let reg6 = /[23-68]/
let reg7 = /^(2[3-9]|[3-5]\d|6[0-8])$/
|
写一个正则,匹配第二个字母和第四个字母相同
let reg = /^[a-z]([a-z])[a-z]\1$/ console.log(reg.test('data')) console.log(reg.test('java')) console.log(reg.test('fear'))
|
数据类型检测
Object.isTypeOf = function (val){ let result = Object.prototype.toString.call(val) let reg = /^\[object ([a-zA-Z]+)\]$/ let [,catches] = reg.exec(result) return catches } console.log(Object.isTypeOf(1)) console.log(Object.isTypeOf(true))
|
url查询参数序列化
let url = 'https://www.baidu.com/s?name=mars&age=18&address=hebei' let reg = /([^?=&]+)=([^?=&]+)/ig let urlAry = url.match(reg) let params = {} for(let i = 0 ; i < urlAry.length ; i++){ let item = urlAry[i] let itemAry = item.split('=') params[itemAry[0]] = itemAry[1] } console.log(params)
let url = 'https://www.baidu.com/s?name=mars&age=18&address=hebei' let params = {}; let reg = /([^?=&]+)=([^?=&]+)/ig; url.replace(reg, (str, key, value) => params[key] = value); console.log(params);
const queryURLParameter=(url)=> { let regParam = /([^?&=#]+)=?([^?&=#]+)?/ig, obj = {}; url.replace(regParam, (...arg) => { obj[arg[1]] = arg[2]; }); return obj; }
|
参考文档
正则大全