JS 正则

464 阅读1分钟

正则,一直是我很害怕的东西,每次都忘记,做一个总结吧。

String.prototype.match

match()方法检索返回一个字符串匹配正则表达式的结果 简而言之,传入一个正则,给出相关的表达式。或者拿一个字符串,里面嵌套着正则也行。

正则表达式

常用的标志描述
.任意的字符
[]给出一种字符来填补这个位置
()给定字符串,必须匹配上这个才能算匹
{}给出范围大小
*0-无穷个
+1-无穷个
不确定有没有
\d所有数字
\D所有不是数字
\w所有字母和数字
\W所有非字母
\s所有空格
\S所有不是空格
以...开头,如果在[]里面意思是非
$以...结尾

以上,基本上全部概括了常用的正则表达式的东西,具体使用的时候看需求是啥。这边给出十道题目以及对应的写法

  • 题目一:写一个正则表达式,使其能同时识别下面所有的字符串:’bat’,’bit’, ‘but’, ‘hat’, ‘hit’, ‘hut’
String.match(/[bh][aiu]t/g)
  • 匹配由单个空格分隔的任意单词对
String.match(/\w+\s\w+/)
  • 题目三:匹配由单个逗号和单个空白符分隔的任何单词和单个字母,如姓氏的首字母
String.match(/\w+[\s,]\w+/)
  • 题目四:所有标识符可以包括英文、数字以及下划线(_),但不能以数字和其他字符开头。请匹配所有标识符要求的字符
String.match(/[a-zA-Z_][a-zA-Z0-9_]+/)
  • 题目五:根据美国街道地址格式,匹配街道地址。美国街道地址使用如下格式:1180 Bordeaux Drive。使你的正则表达式足够灵活,以支持多单词的街道名称,如3120 De la Cruz Boulevard
String.match(/\d+ \w+[\s]?\w+/i)
  • 题目六:匹配以“www”起始且以“.com”结尾的简单Web域名:例如,www.yahoo.com ,也支持其他域名,如.edu .net等
String.match(/^(www)\.\w+\.(com|edu|net)/)
  • 题目七:匹配所有能够表示JavaScript整数的字符串集
String.match(/[^-]{2,}\d+/)
  • 题目八:提取’‘nihao 2018-08-08 02:29:01 hhh’‘中完整的年月日和时间字段
//提取年月日
String.match(/\s{4}-\s{2}-\s{2}/)
//提取时间字段
String.match(/\s{2}:\s{2}:\s{2}/)
  • 题目九:提取用js获得的时间的年月日和时间字段
function getDate(){
        const date = new Date().toString();
        console.log(date); //Fri Apr 09 2021 13:35:26 GMT+0800
        const year = date.match(/\s\d{4}\s/)[0]
        const month = date.match(/[\w]+/g)[1]
        const day = date.match(/\w+/)[0]
        const time = date.match(/\d{2}:\d{2}:\d{2}/)[0]
        return [year,month,day,time]
  • 题目十:从网址中提取出域名:
String.match(/(w){3}\.\w+\.\w+/)

至此,一般的正则自己是可以对付了 奖励一下自己,写一个面试常问的———如何用正则多项式实现trim

function myTrim(string){
    if(typeof string === "string"){
        retrun string.replace(/^\s+|\s+$/,"")
    }else{
        return "输入的类型不对"
    }
}