有你在真好 的个人博客
正则表达式的高频使用场景
阅读:2219 添加日期:2021/3/27 23:23:20 原文链接:https://www.toutiao.com/item/6476921020585345550/

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

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

图片来源于网络

  1. 匹配结尾的数字

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

  2. 30CAC0040 取出40

    3SFASDF92 取出92

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

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

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

  5. 电话号码正则

    验证电话号码的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})?

  6. 手机号码正则表达式

    正则验证手机号,忽略前面的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}匹配。

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

    //删除字符串两侧的空白字符。

    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,'');

    }

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

    只能输入数字和小数点

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

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

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

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

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

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

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

    例如: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);

  10. 匹配<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替换就行。

  11. 用正则表达式获得文件名

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

    正则如下:

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

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

  12. 用户名正则

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

    正则如下: /^[
    /u4E00-/u9FA5/uf900-/ufa2d/w]{4,16}$/

  13. 身份证号码的匹配

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

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

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

  14. 单词首字母大写

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

    正则如下:

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

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

  15. 正则验证日期格式

    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}$/

  16. 去掉文件的后缀名

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

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

    //.asp$/

    匹配最后的.asp而已

  17. 验证邮箱的正则表达式

    正则如下:

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

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

  18. 正则判断标签是否闭合

    例如:<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

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

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

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

    下面是正则:

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

    思路非常的清晰:

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

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

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

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

    [a-z0-9]+

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

  20. 空格与英文同时存在

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

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

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

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

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

ICP备案号:苏ICP备14035786号-1 苏公网安备 32050502001014号