正则表达式的高频使用场景

JavaScript/前端
477
0
0
2022-05-04

最近在学习JS正则表达式,个人感觉比较抽象,而在一些地方使用频率又比较高,因此整理了一些在某些场景下正则表达式的写法。废话不多说。

正则表达式的高频使用场景

图片来源于网络

匹配结尾的数字

用正则表达式取出字符串最后一组数字, 如

30CAC0040 取出40

3SFASDF92 取出92

正则如下://d+$/g

判断字符串是不是由数字组成

正则如下:/^/d*$/;

电话号码正则

验证电话号码的JS正则判断

正则如下:/^/d{3,4}-/d{7,8}(-/d{3,4})?$/

区号必填为3-4位的数字,区号之后用“-”与电话号码连接

^/d{3,4}-

电话号码为7-8位的数字

/d{7,8}

分机号码为3-4位的数字,非必填,但若填写则以“-”与电话号码相连接

(-/d{3,4})?

手机号码正则表达式

正则验证手机号,忽略前面的0,支持130-139,150-159,170-179,180-189。忽略前面0之后判断它是11位的。

正则如下:/^0*(13|15|17|18)/d{9}$/

^0*匹配掉开头任意数量的0。

由于手机号码是13任意数字9位,和15任意数字9位,所以可以用(13|15)/d{9}匹配。

用正则表达式实现删除字符串中的空格:

//删除字符串两侧的空白字符。
function trim(str){
    return str.replace(/^/s+|/s+$/g,'');
}
//删除字符串左侧的空白字符。
function ltrim(str){
    return str.replace(/^/s+/g,'');
}
//删除字符串右侧的空白字符。
function rtrim(str){
    return str.replace(//s+$/g,'');
}

限制文本框只能输入数字和小数点等等

只能输入数字和小数点

正则如下: /^/d*/.?/d{0,2}$/

开头有若干个数字,中间有0个或者一个小数点,结尾有0到2个数字。

只能输入小写的英文字母和小数点,和冒号,正反斜杠(:.//)

正则如下/[a-z/.////:]+/;

a-z包括了小写的英文字母,/.是小数点,//和//分别是左右反斜线,最后是冒号。整个组成一个字符集和代码任 一均可,最后在加上+,1或者多个。

替换小数点前内容为指定内容

把字符串的小数点前面的字符替换为自定义的字符串

例如:infomarket.php?id=197 替换为test.php?id=197

把第一个点“.”之前的所有单词字符替换为test就可以了。

正则如下:

<script type="text/javascript">

var str = "infomarket.php?id=197";

var reg = /^/w*/ig;

//匹配字符串开头的任意个单词字符

str = str.replace(reg,'test');

document.write(str);

匹配<ul>与<ul>之间的内容

例子如下:

<ul>safsf<ul>safsf</ul><ul>safsf</ul></ul>

用正则可以得到<ul>起到下个<ul> 之间的内容。

正则如下:

/<ul>[/s/S]+?<ul>/i

首先匹配两侧的ul标签,中间的[/s/S]+?可以匹配一个或者多个任意字符,一定要非贪婪,否则会匹配 <ul>safsf<ul>safsf</ul><ul>。注意如果想匹配其他标签里的内容,把ul替换就行。

用正则表达式获得文件名

如:c:/images/tupian/006.jpg 可能是直接在盘符根目录下,也可能在好几层目录下,要求替换到只剩文件名。

正则如下:

/[^////]*[////]+/g

首先匹配非左右斜线字符0或多个,然后是左右斜线一个或者多个。形如“xxx/”或者“xxx/”或者“/”或 者“/” 。

用户名正则

用于用户名注册,,用户名只能用中文、英文、数字、下划线、4-16个字符。

正则如下: /^[

/u4E00-/u9FA5/uf900-/ufa2d/w]{4,16}$/

身份证号码的匹配

身份证号码可以是15位或者是18位,其中最后一位可以是X。其它全是数字,正则如下:

/^(/d{14}|/d{17})(/d|[xX])$/

开头是14位或者17位数字,结尾可以是数字或者是x或者是X。

单词首字母大写

每单词首字大写,其他小写。如blue idea转换为Blue Idea,BLUE IDEA也转换为Blue Idea

正则如下:

//b(/w)|/s(/w)/g

所谓“首字母”包括两种情况:第一种是边界(开头)的单词字符,一种是空格之后的新单词的第一个字母。

正则验证日期格式

yyyy-mm-dd格式的正则

正则如下:

/^/d{4}-/d{1,2}-/d{1,2}$/

4位数字,横线,1或者2位数字,再横线,最后又是1或者2位数字。

第二种格式:.yyyy/mm/dd

用“或”简单地修改一下就行了。

/^/d{4}(-|//)/d{1,2}(-|//)/d{1,2}$/

去掉文件的后缀名

如:www.abc.com/dc/fda.asp变为www.abc.com/dc/fda。

如果文件后缀已知的话这个问题就非常简单了,正则如下:

//.asp$/

匹配最后的.asp而已

验证邮箱的正则表达式

正则如下:

/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/

开始必须是一个或者多个单词字符或者是-,加上@,然后又是一个或者多个单词字符或者是-。然后是点“.”和单词字符和-的组合,可以有一个或者多个组合。

正则判断标签是否闭合

例如:<img xxx=”xxx” 就是没有闭合的标签;

<p>p的内容,同样也是没闭合的标签。

从简单的正则开始,先匹配起始标签

/<[a-z]+/i

再加上若干属性:

/<[a-z]+(/s*/w*?/s*=/s*".+?")*/i

下面就到关键点了,标签的闭合。标签可能有两种方式闭合,<img xxx=”xxx” />

或者是<p>xxx </p>。

(/s*//>)

匹配img类的结束,即/>。

(/s*?>[/s/S]*?<///1>)

匹配/p类标签的结束标签。>是其实标签末尾,之后是标签内容若干个任意字符,最后的<///1>就是

结束标签了。 加上一个或就可以解决了,最后的完整正则表达式:

整个正则:/<([a-z]+)(/s*/w*?/s*=/s*".+?")*(/s*?>[/s/S]*?<///1>|/s*//>)/i

拿这个正则,只要匹配到了就表示闭合,没匹配到则没有闭合。不过没有考虑相同标签嵌套的问题,例如

<div>aaaaaa<div>test</div>

也被判断为合格,可以通过把最后的匹配p类结束标签写成子正则表达式,并且更改为非贪心,然后在

匹配结果中检查是否成对。正则如下:

/<([a-z]+)(/s*/w*?/s*=/s*".+?")*(/s*?>[/s/S]*?(<///1>)+|/s*//>)/i

正则判断是否为数字与字母的混合

不能小于12位,且必须为字母和数字的混合。

验证字符串包含数字简单,验证字符串包含字母也简单,验证字符串不包含其它字符也简单,可以用这三个正则 分别检查一次字符串,逻辑运算出最终结果。

下面是正则:

/^([a-z]+(?=[0-9])|[0-9]+(?=[a-z]))[a-z0-9]+$/ig

思路非常的清晰:

[a-z]+(?=[0-9])

字母开头,后面必须紧跟着数字。

[0-9]+(?=[a-z]

数字开头,后面必须紧跟着字母。

[a-z0-9]+

后面的字符只要是数字或者字母就可以了。

空格与英文同时存在

匹配英文以及空格,要求必须既有英文字母又有空格。

这个思路和上面的差不多,只要把数字改成空格就可以了。正则如下:

/^(([a-z]+/s+)|(/s+[a-z]+))[a-z/s]*$/i

英文开头加空格,或者是空格开头加英文,后面可以是英文或者空格。

编程语言大都有相同之处,正则中java与JS的不同就在于java使用“”双引号表达正则规则,如第十四个 //.asp$/ 把两边的//双斜扛替换为“”,写成的正则就成为".asp$"。