跳至主要內容

正则表达式

Emilia Zhen大约 3 分钟js

元字符

默认情况下一个元字符匹配一个字符

\d 数字
\D非数字
\w字符[0-9a-zA-Z_]不包括空白字符
\W非..
\s空白字符 空格回车换行
\S非..
.除了换行以外所有的字符
^限制开头
$限制结尾

量词

修饰前面一个字符出现的次数

*出现 0 或多次
+出现 1 或多次
?出现 0 或 1 次
{n}出现 n 次
{n,}出现 n 次或多次
{n,m}出现 n 次到 m 次

中括号

内容备注
[abc]匹配一个字符,中括号中的内容都是或的关系这个字符可以是 a 或 b 或 c
[0-9]匹配一个范围匹配一个字符,0-9 之间的数都可以
[a-z0-9]匹配一个范围匹配一个字符,0-9 或 a-z 都可以
[^abc]在中括号中可以取反匹配一个字符,该字符是非 a 或非 b 或非 c

小括号

提高优先级 |s(u|o)n :匹配 son 或 sun

转义符

\

JS 中创建正则表达式对象

构造函数创建

var regex = new RegExp()

字面量创建

var regex = /abc/

匹配

判断字符串是否满足正则表达式的规则

regex.test('aaa')

onchange 事件

当失去焦点并且内容发生改变时才会触发

exec() 提取

正则表达式对象的方法 执行一次会将正则匹配到的一个字符串放入数组,并返回,开启全局匹配后调用一次,会往后找一个,每次只会找到一个匹配的字符串 如果需要提取一个字符串中所有符合条件的字符串,需要配合循环来使用,不推荐使用exec(),建议使用字符串的方法:match();

var str = '张三:2500,李四:3000,王五:50000'
// var reg = /\d+/gi; // gi 全局匹配并且忽略大小写
var reg = /\d+/g
do {
  var content = reg.exec(str)
  if (content) {
    console.log(content[0]) // 类型是string
  }
} while (content)

match();

String对象的方法 与exec()方法不同,如果开启全局匹配,调用一次会把所有满足条件的字符串提取出来放入一个数组 如果需要提取所有满足条件的字符串,建议使用该方法

var str = '2323@xx.com,tmf@wref.cn其他 2490ef@chinatower.com.cn'
var reg = /\w+@\w+(\.\w+)+/g
console.log(str.match(reg))

分组提取

var dateStr = '2018-3-12'
var reg = /(\d{4})-(\d{1,2})-(\d{1,2})/
reg.test(dateStr)
reg.exec(dateStr)
dateStr.match(reg)
console.log(RegExp.$1)
console.log(RegExp.$2)
console.log(RegExp.$3)

split()

切割,根据正则表达式来规定分隔符进行切割

var str = 'xxx@sina.com'
console.log(str.split(/[@.]/)) //["xxx","sina","com"]

贪婪模式和非贪婪模式

var str = '<div>aaa</div>'
str.match(/<.+>/) // ["<div>aaa</div>"]
str.match(/<.+?>/) // ["<div>","</div>"]