JavaScript正则表达式

本文深入解析正则表达式的创建、方法与参数,涵盖exec()、test()、元字符、量词、正向预查等核心概念,并提供实用示例,如电话号码与手机号的正则匹配。

创建正则表达式

var reg = /abc/;

var reg = new RegExp('abc');

正则表达式的方法

exec():

reg.exec(str)

其中str为要执行正则表达式 的字符串,该方法会返回一个数组,其中第一位为在str中匹配出的字符串,index为匹配出的字符串首次出现的位置。

test():

reg.test(str)

str同样为要执行正则表达式的字符串,该方法会判断str中是否有符合正则表达式的字符串,如果有返回true,否则返回false。

 

正则表达式参数

i (ignore) 忽略大小写

g (global) 全局匹配

m (multiline) 多行匹配

表达式

1. [abc]

查找方括号之间的任意字符,匹配的为单个字符,可以为方括号中的任意一个。

方括号中的也可以为一个范围,比如[a-zA-Z0-9],这样代表匹配所有字母以及数字

[^abc]

查找不再方括号范围内的字符,注意^的位置,是在方括号里面,是取反的意思。

2. ()

括号的作用是提高优先级以及产生子表达式

3. |

或表达式,和[]功能差不多,可以配合()来使用

元字符

1. .(点) /./

可以匹配出除了换行符(\n)和行结束符 (\r) 之外的所有字符

2. \w

该元字符可以匹配单词字符,即A-Za-z0-9_

注意:该符号可以匹配下划线

3. \W

匹配除了\w可以匹配的其他字符

4. \d

匹配数字字符,即0-9

5. \D

匹配除了数字字符其他的其他字符

6. \s

匹配空白字符

空白字符包括:空格符、制表符(\t)、回车符(\r),换行符(\n),垂直换行符(\v)、换页符(\f)

7. \S

查找非空白字符,即除了\s包括的空白字符之外的其他字符。

我们如果要匹配任意字符的话,就可以搭配起来使用了:

[\s\S]、[\d\D]、[\w\W]等都可以

8. \b

匹配单词边界, 只有在单词的开头位置才会匹配

9. \B

匹配非单词边界, 匹配非单词边界中的字符

注意: 汉字本身就是一个单词,每个汉字两边默认含有单词边界

量词

以下的n代表一个变量,可以为表达式或者元字符

1. n+

匹配至少一个变量n

2. n*

匹配至少0个变量n

3. n?

匹配0-1个变量n

4. n{x}

规定匹配x个变量n,大括号可以为一个区间,使用,隔开,比如{1,4}匹配1-4个,如果区间不写第二个则可以无限匹配,这里默认为贪婪匹配,尽可能多的匹配。

如果{}?,在大括号后面添加一个?则变为最小匹配,

5. n$

匹配以n结尾的字符

6. ^n

匹配以n开头的字符

注: 小括号可以作为子表达式来引用

例:匹配xxxx

/(\w)\1\1\1|(\W)\2\2\2/

其中()内为子表达式,\1为反向引用一次第一个子表达式,如需多次引用则添加多个,其中1代表第一个子表达式,以此类推第二个为2。

字符串常用方法

str.replace()

第一个参数为正则表达式,第二个参数为要替换的内容

例:将形如xxyy的内容进行反转替换成为yyxx

let reg = /(\w)\1(\w)\2/

let str = 'aacc'

str.replace(reg, $2$2$1$1)

 

这里replace的第二个参数也可以反向引用正则表达式的子表达式内容,使用$来引用,也可以为一个函数

str.replace(reg, function ($, $1, $2) { return $2+$2+$1+$1 })

 

正向预查:?=n ?!n为反向,即不为n

例: 找出后面是b的a(这里b作为判断条件,但实际上查的为a)

let reg = /a(?=b)/

常用正则表达式

1. 取出字符串结尾的数字

const reg = /\d+$/g;

const str = 'ass340';

const number = reg.exec(str)[0]; //"340"

2.固定电话正则

/\d{3,4}-\d{7,8}(-\d{3,4})?$/

区号 电话号码 分机号(非必填)

3. 手机号正则

/^(0*|86|17951)?(13\d|15\d|166|17[3678]|18\d|14[57])\d{8}$/

忽略0及86、17951

未完待续,持续更新中。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值