一、概念语法介绍
英文名 regular expression(简写regex),由字母数字特殊符号构成的描述字符串模式的表达式。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
1.功能
1.模糊匹配。2.文本的检索。3.替换功能。
2.创建方式
构造方法:
var reg = new RegExp('表达式')第二个参数修饰符 i忽略大小写 m多行匹配 g全文匹配
字面量 隐式 直接量
var reg = /表达式/修饰符
3.正则表达式的常用方法
1.test(str)
返回true匹配 false不匹配
2.exec(str)
找到返回数组,否则返回null
4.支持正则的字符串的方法
1.replace() replaceAll()
2.split()
3.match()
"http://www.baidu.com?name=张三&age=19".match(/(\?|&)\w+=[\u4e00-\u9fa5\w#]+/g)
// ['?name=张三', '&age=19']
4.search()
返回字符串中第一个与regexp相匹配的子串的起始位置。如果没有找到,返回-1。
不执行全局匹配,自动忽略g。同时忽略regexp的lastIndex值,总是从字符串的开始进行检索。
二、如何写正则表达式
元字符(特殊字符)
^ // 开头
[] // 匹配括号内的任一个字符 例如[0-9]
[^...] // 匹配除了括号内的任意字符
\d // 数字
\D // 非数字
\w // 字母数字下划线
\W // 非字母数字下划线
. // 除了换行符以外的任意字符
\b // 单词边界
\B // 非单词边界
() // 选择
$ // 结束
非打印字符
\s // 空格
\S // 非空格
\n // 换行
\r // 回车符
\t //制表符
限定符
{6} // 匹配前一项6次
{6,10}
{6,}
? // 0或1次,相当于{0,1}
+ // 1到多次,相当于{1,}
* // 0或多次,相当于{0,}
转义字符
语法: \元字符
这些元字符需要转义 [] {} () ? * + / ^ & . |
特例
[\u4e00-\u9fa5] // 汉字 巧记规则:有事100,有酒罚我
[\x00-\xff] // 单字符
[^\x00-\xff] // 双字符
分组
() $1
三、正则表达式的一些例子,可做参考
1.将一个汉字统计为两个字符
const reg = /[\u4e00-\u9fa5]/g
let str1 = str.replace(reg,'**')
console.log(str1.length)
2.判断是否为全数字
const reg = /\D/
if(!reg.test(pwd)){
alert('密码不能全为数字')
}
3.字符串去重
let str = 'aaabbbccccdddd'
let res = str.replace(/(.)(\1)+/g,function($1,$2,$3){return $2})
console.log(res) // 'abcd'
4.将数字改为千分形式
'12456.33'.replace(/\B(?=(\d{3})+(?!\d))/g,",")
5.判断一个串是否符合规则
{validator:(rule, value, callback) => {
var reg = /^[0-9a-zA-Z]*$/g
if (!reg.test(value)) {
callback('只能输入数字字母')
}
callback()
},trigger: 'blur'}
// /^[0-9a-zA-Z]*$/g.test('faf,')
// false 因为有逗号
6.一段文字替换话题为高亮
// 话题是#开头 空格结尾
'#发发 发 adf #3阿斯顿发 #发发 #找我玩 啊发发'.replace(/(#[^#\s]\S*)/g,`<$1>`)
// '<#发发> 发 adf <#3阿斯顿发> <#发发> <#找我玩> 啊发发'
// 话题是#开头 #空格结尾 中间不能有空格
'#发 发# ##发 adf # 发不发# ##找#我玩# 啊发发'.replace(/(#[^#\s]*#\s)/g,`<$1>`)
// 只有#我玩#被匹配