1 符号及其含义
1 | * 重复0+次 |
2 正则一些常用方法
test()
1 | new RegExp('Nola','i') // /Nola/i |
search()类似于indexOf()
1 | 'Nola'.search(/o/) // 1 |
match()可以将字符串转化成数组的形式
1 | 'Date 2018-08-07 2018-09-15'.match(/\d{4}-\d{2}-\d{2}/) |
string.matches()
这个方法主要是返回是否匹配指定的字符串,如果匹配则为true,否则为false;
replace()匹配并替换
1 | //[ ] \ ^ $ . | ? * + ( )需要转义,[] 之间的特殊字符一般不需要转义 |
输入框只能输入数字1
2
3onkeyup=“this.value=this.value.replace(/[^\d]/g,’’) “
onafterpaste=“this.value=this.value.replace(/[^\d]/g,’’) “
//onafterpaste作用:防止用户从其它地方copy内容粘贴到输入框
输入框只能输入字母和下横线的正则表达式1
2onkeyup="this.value=this.value.replace(/[^_a-zA-Z]/g,'')"
onpaste="this.value=this.value.replace(/[^_a-zA-Z]/g,'')"
输入框只能输入字母数字和下横线的正则表达式1
2
3
4
5
6//第一种方法
onkeyup="this.value=this.value.replace(/[^\w]/g,'')"
onpaste="this.value=this.value.replace(/[^\w]/g,'')"
//第二种方法
onkeyup="this.value=this.value.replace(/[\W]/g,'')"
onpaste="this.value=this.value.replace(/[\W]/g,'')"
测试是否是数字/替换非数字部分1
2/^[0-9]*$/.test(num)) //测试输入的是不是数字
num=num.replace(/[^0-9]+/ig,"") //替换掉不是数字的部分
3 贪婪模式和懒惰模式
贪婪模式 /'.*'/g
中.*
是贪婪的,会尽可能的匹配多。包括匹配的两者之间的1
2"there is 'Lola' and 'Nola'".match(/'.*'/g)
// ["'Lola' and 'Nola'"]
懒惰模式给 .*
设置懒惰模式成 .*?
。其中?
指0或1次1
2"there is 'Lola' and 'Nola'".match(/'.*?'/g)
// ["'Lola','Nola'"]
4 分组捕获和排除分组
分组捕获模式即一对括号 () 包围的模式, []是定义匹配的字符范围1
2
3
4
5'127.0.0'.match(/(\d{1,3}\.){2}\d{1,3}/g)
// ["127.0.0"] ()分组即让(\d{1,3}\.)成为一个整体{3}即出现3次
//$1代表第一个分组捕获的内容
'I am Nola from ShangHai'.replace(/I am (\w{4}) from ShangHai/,'我是来自上海的 $1')
// "我是来自上海的 Nola"
排除分组在分组添加 ?:
可进行排除如(?:\d+)$/)
。() 中的 | 表示 或。
Ps:正则的 m
标记 /…/m
表示多行模式,它会影响 ^
和 $
的表现。