正则表达式

538 阅读3分钟

正则

一种用于描述某种字符串规则的表达式,内置提供了很多种规则,我们根据这些内置的规则进行组合
组成:普通字符+特殊字符(元字符)+修饰符(模式)

test

test:正则去匹配字符串,如果匹配成功就返回真,如果匹配失败就返回假

  • 正则.test(字符串)
问题一
var str='37892r989302'
var re = /\D/
re.test(str)? alert('不全是数字'):alert('全是数字')

转义字符

\s:空白符,包括空格、制表符、换页符、换行符和其他空格
\S:非空白格
\d:数字
\D:非数字
\w:字符 (字母、数字、下划线)等同于a-zA-Z0-9_
\W:非字符
. : 任意字符
\.: 真正的点
\1: 重复的第一个子项
\2: 重复的第二个子项
\t: 制表符
\r: 回车符
\n: 换行符

字符集合

[xyz]: 一个字符集合,也叫字符组,匹配集合中的任意一个字符。可以使用连字符‘-’指定一个范围

  • [10] 1或者0
  • [1-50] 1-5或者0
  • [.] 代表的是点 [^xyz]: 一个反义或补充字符集,也叫反义字符组。它匹配任意不在括号内的字符。

模式

i ignore 忽略大小写模式:匹配不区分大小写
m 多行模式:将开始和结束字符视为在多行上工作
g 全局

  • 默认情况下,正则的匹配是一种懒惰模式,当满足一次匹配以后就不在继续了

量词

量词:匹配不确定的位置
+:至少出现一次
{}: 出现的次数

  • {4,7}:最少出现4次,最多出现7次
  • {4,}:最少出现4次
  • {4}: 正好出现4次

?: 出现0次或者一次
*:至少出现0次

边界

^: 正则的最开始位置,就代表起始的意思
$: 正则的最后位置,就代表结束的意思
\b :匹配一个零宽单词边界
\B:匹配一个非零宽单词边界

var val = 989803823
var re=/^[1,9]\d{4,11}$/
re.test(val)? alert('是qq号'):alert('不是qq号')

单词边界符:一个\w的左侧或者右侧不在是一个\w,这里就会有一个零宽单词边界

search

search:正则去匹配字符串,如果匹配成功,就返回匹配成功的位置,如果匹配失败就返回-1

  • 字符串.search(正则)

正则中的默认:是区分大小写的 如果不区分大小写的话,在正则的最后➕标识i

var re = /B/i;
var re = new RegExp('B','i'); 

match

match:正则匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null

  • 字符串.match(正则)

正则默认:正则匹配成功就会结束,不会继续匹配,如果想全部查找,就要加标识g(全局匹配)

var str='hgsj133hgdow1u3r747iy 932khfu88'
var re=/\d+/g
alert(str.match(re))

replace

replace:正则去匹配字符串,匹配成功的字符去替换成新的字符串

  • 字符串.replace(正则,新的字符串)

split

匹配子项:()小括号

let str = ''
let re1 = /\$(\w+)/
 // 0: 数组中的第0个表示整个正则当前这次匹配内容
 // 1: 数组中的第一个表示整个正则当前这次匹配内容中的第一个子项中的内容
 
 let re = /\$(?<a>\w+)/
 groups属性获   取第一个子项的内容
 
 let re2 = /\$(?:\w+)/ 不具有捕获性,不会把匹配结果保存到(子项结果)中
 
 用于指定查找在某些内容(但并不包括这些内容)之前或之后的内容
 正向预查
 let re3 = /win(?=\d+)/g 肯定
 let re4 = /win(?!\d+)/g 否定
 
 负向预查
 let re5 = /(?<=\d+)px/g 肯定
 let re6 = /(?<!\d+)px/g 否定

当正则需要传参的时候,一定要用全称的写法