正则,一直是我很害怕的东西,每次都忘记,做一个总结吧。
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 "输入的类型不对"
}
}