基础练习: 

 //连续3个数字
var pattern1 = /\d{3}/g;
console.log(pattern1.test('s23')); // false
console.log(pattern1.test('s112s')); // true //连续2个相同的 数字
var pattern1 = /(\d)\1/g;
console.log(pattern1.test('s23')); // false
console.log(pattern1.test('s223s')); // true //连续3个相同的数字
var pattern1 = /(\d)\1{2}/g;
console.log(pattern1.test('s23')); // false
console.log(pattern1.test('s222s')); // true //连续3个或3个以上 相同的 字符
var pattern1 = /(\w)\1{2,}/g;
console.log(pattern1.test('s23')); // false
console.log(pattern1.test('saaaa2s')); // true //正整数
[1-9]\d* //负整数
-[1-9]\d* //整数
(-?[1-9]\d*)|0 //正浮点数
\d+.\d+ //负浮点数
-\d+.\d+ //浮点数
-?\d+.\d+ //中文字符
[\u4e00-\u9fa5] //双字节中文字符
[^\x00-\xff] //空格
\s //换行
\n

^ 和 $ 使用:

 //假如我把 正浮点数 的正则写成这样 :(0.\d+)|(\d+.\d+) ,现在开始匹配

 //匹配一个字符串中的 正浮点数
var pattern = /(0.\d+)|(\d+.\d+)/;
console.log(pattern.test('0')); // false
console.log(pattern.test('0.5')); // true
console.log(pattern.test('a0.5')); // true
console.log(pattern.test('a0.5s')); // true
console.log(pattern.test('a0.a5s')); // false //匹配以 `正浮点数` 开头或结尾 的字符串
var pattern = /^(0.\d+)|(\d+.\d+)$/;
console.log(pattern.test('0.5')); // true
console.log(pattern.test('a0.5')); // true
console.log(pattern.test('a0.5s')); // false
console.log(pattern.test('a0.a5s')); // false //只匹配 正浮点数
var pattern = /^(0.\d+)$|^(\d+.\d+)$/;
//或 /^((0.\d+)|(\d+.\d+))$/
console.log(pattern.test('0.5')); // true
console.log(pattern.test('a0.5')); // false
console.log(pattern.test('a0.5s')); // false
console.log(pattern.test('a0.a5s')); // false

格式日期:

//只匹配 日期格式:年-月-日
var pattern7 = /^\d{4}-(1[0-2]|0?[1-9])-(0?[1-9]|[12]\d|3[01])$/;
console.log(pattern7.test('ad2016-08-20ad')); // false
console.log(pattern7.test('2016-08-20')); // true
console.log(pattern7.test('2016-8-20')); // true
console.log(pattern7.test('16-08-20')); // false
console.log(pattern7.test('2016/08/20')); // false
//若去掉^和$
var pattern7 = /\d{4}-(1[0-2]|0?[1-9])-(0?[1-9]|[12]\d|3[01])/;
console.log(pattern7.test('ad2016-08-20ad')); // true //只匹配 日期格式:年-月-日 或 年.月.日 或 年/月/日
var pattern7 = /^\d{4}(\/|\-|.)(0?[1-9]|1[0-2])\1(0?[1-9]|[12]\d|3[0-1])$/
console.log(pattern7.test('ad2016-08-20ad')); // false
console.log(pattern7.test('2016-08-20')); // true
console.log(pattern7.test('2016/08/20')); // true
console.log(pattern7.test('2016.8.20')); // true
console.log(pattern7.test('2016-08-9')); // true
console.log(pattern7.test('2016/18/20')); // false

时间:

//只匹配  时间格式:小时:分钟, 24小时制
var pattern8 = /^((0?|1)\d|2[0-3]):([0-5]\d)$/;
console.log(pattern8.test('13:45')); // true
console.log(pattern8.test('3:45')); // true
console.log(pattern8.test('13点45')); // false

身份证号码:

//只匹配 中国大陆身份证号,15位或18位
var pattern9 = /^\d{15}|\d{17}[\d|X]$/;
//或 /^\d{15}(\d{2}[0-9X])?$/
console.log(pattern9.test('15020416803082111X')); //true
console.log(pattern9.test('422322199901090033')); // true
console.log(pattern9.test('asdfasdfasfasdf123')); // false

其它:

//只匹配 用户名
^[A-Za-z0-9_\/-\u4e00-\u9fa5]+$ //只匹配 长度为8-10的用户密码(以字母开头、数字、下划线)
^[A-z\_]\w{7,9}$ //只匹配 QQ号
^[1-9](\d{5,11})$ //只匹配 手机(国内)
^0?(13|14|15|17|18|19)[0-9]{9}$

面试练习题:

1、匹配字符串中所有的HTML(1)标签头部 或 尾部 (2)标签头部(3)完整标签

var str = 'ada<option value="hh">0</option>54<div id="as">adda</div>ad'
var result = str.match(/<.*>/g);
console.log(result); //["<option value="hh">0</option>54<div id="as">adda</div>"] //(1)匹配 标签头部 或 尾部
var result = str.match(/<.*?>/g);
console.log(result); //["<option value="hh">", "</option>", "<div id="as">", "</div>"] //(2)匹配 标签头部
var result2 = str.match(/<[A-z].*?>/g);
console.log(result2);// ["<option value="hh">", "<div id="as">"] //(3)匹配 完整标签
var result3 = str.match(/<[A-z].*?>.*?<\/.*?>/g);
console.log(result3);// ["<option value="hh">0</option>", "<div id="as">adda</div>"]

2、写出正则表达式, 从一个字符串中提取所有链接地址。 比如下面字符串中

var str = 'IT面试题博客中包含很多<a href="http://hi.baidu.com/mianshiti/blog/category/微软面试题">微软面试题</a>';
var exg = /<a(?: [^>]*)+href="(.*)"(?: [^>]*)*>/g;
console.log(exg.exec(str)[1]);
//http://hi.baidu.com/mianshiti/blog/category/微软面试题

3、如何获取一个字符串中的数字字符,并按数组形式输出,如:‘dgfhfgh254bhku289fgdhdy675gfh’ ,输出[254,289,675]

var str = 'dgfhfgh254bhku289fgdhdy675gfh';
console.log(str.match(/\d+/g)); //["254", "289", "675"]

4、敏感词过滤

var str = '我草你妈哈哈背景天胡集涛哪肉涯剪短发欲望';
var result = str.replace(/草|肉|欲|胡|急|涛/g,'*');
console.log(result); //我*你妈哈哈背*天***哪*涯剪短发*望

5、给的字符串str,检查其是否符合美元书写格式

  1、以$开头

  2、整数部分从个位起,满三个数用“,”分隔

  3、如果是小数,则小数部分长度为2

  4、正确的格式如:$1,023,032.03或$2.03,错误格式:$3,432,12.12或者$34,344.3

var pattern7 = /^\$\d{1,3}(,\d{3})*(\.\d{2})$/;
console.log(pattern7.test('$1,023,032.03')); // true
console.log(pattern7.test('$2.03')); // true
console.log(pattern7.test('$3,432,12.12')); // false
console.log(pattern7.test('$34,344.3')); // false
console.log(pattern7.test('da$2.03')); // false

6、给定字符串 str,检查其是否以元音字母结尾。

  元音字母包括 a,e,i,o,u,以及对应的大写;若包含则返回 true,否则返回 false

function endsWithVowel(str) {
return (/[a,e,i,o,u]$/i).test(str);
}
console.log(endsWithVowel('gorilla')); //true
console.log(endsWithVowel('gorillE')); //true
console.log(endsWithVowel('gorillx')); //false

7、驼峰式字符串borderLeftColor和 连字符式字符串border-left-color相互转换

var str = 'borderLeftColor';
var str2 = 'border-left-color'; ///把str换成 连字符式
console.log(str.replace(/[A-Z]/g, (item) => '-' + item.toLowerCase())); //border-left-color
//把str换成 驼峰式
console.log(str2.replace(/-([a-z])/g, (item, $1) => $1.toUpperCase())); //borderLeftColor

8、对人口数字的格式化处理,三位数字用一个’,’(逗号)隔开

function numberWithCommas(x) {
//对右侧人口数字的格式化处理,三位数字用一个','(逗号)隔开
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
console.log(numberWithCommas(12345678))//12,345,678

9、去掉http协议的jpg文件的协议头

var imgs = [
'http://img.host.com/images/fds.jpg',
'https://img.host.com/images/fjlj.jpg',
'http://img.host.com/images/djalsdf.png',
'https://img.host.com/images/adsjfl.png',
'http://img.host.com/image/jasdlf.jpg'
];
var result = imgs.map((img)=>{
return img.replace(/http:(\/\/.+\.jpg)/,(item,$1) => {
return $1
});
});
console.log(result); // ["//img.host.com/images/fds.jpg",
// "https://img.host.com/images/fjlj.jpg",
// "http://img.host.com/images/djalsdf.png",
// "https://img.host.com/images/adsjfl.png",
// "//img.host.com/image/jasdlf.jpg"]

10、找出数组中的表示日期的时间字符串,并修改格式为‘月-日-年’

var times= ['2006/02/03',
'test/07/sd',
'2016/05/10',
'1998-03-07',
'12345/23/45678',
'1234/23/56789',
'12345/23/45']
var result = times.map((time)=>{
return time.replace(/^(\d{4})[/-](\d{2})[/-](\d{2})$/,(match,$1,$2,$3)=>{
return $1-$2-$3;
});
});
console.log(result); //[ '02-03-2006',
// 'test/07/sd',
// '05-10-2016',
// '03-07-1998',
// '12345/23/45678',
// '1234/23/56789',
// '12345/23/45' ]

11、获取 url 中的参数

//    获取 url 参数
function getUrlParam(sUrl, sKey) {
var arr={};
sUrl.replace(/\??(\w+)=(\w+)&?/g,function(match,p1,p2){
//console.log(match,p1,p2);
if(!arr[p1]){
arr[p1]=p2;
}
else {
var p=arr[p1];
arr[p1]=[].concat(p,p2);
}
})
if(!sKey)return arr;
else{
for(var ele in arr){
if(ele==sKey){return arr[ele];}
}
return "";
}
}

12、让字符串制定部分变色

<div id="as" >我爱你哈哈爱你</div>

var oDiv = document.getElementById('as');
var str = oDiv.innerHTML;
var newStr = str.replace(/爱/g, m => "<span style='color:red'>" + m + "</span>");
oDiv.innerHTML = newStr;

显示:我爱你哈哈爱你

转载:https://blog.csdn.net/b954960630/article/details/8263400

JS正则练习集的更多相关文章

  1. js 正则之检测素数

    原文:js 正则之检测素数 相信很多人应该看过这篇文章,我第一次看到的时候是11年的样子,那时候学vbs的时候看过这个问题.原文<检查素数的正则表达式>,在文章里已经解释了他是怎么判断的, ...

  2. js 正则之 判断密码类型

    原文:js 正则之 判断密码类型 今天没啥写的,就分享个思路吧.之前在群里讨论的时候,谢亮兄弟说判断密码是否是纯数字,纯字母之类的.如果用 , 条判断,那就老长一大段了.这个思路是我之前看 jQuer ...

  3. Js正则Replace方法

    JS正则的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\s+)|(\s+$)" ...

  4. js正则

    JS正则 test:判断字符串是否符合规定的正则 rep = /\d+/; rep.test("asdfoiklfasdf89asdfasdf") # true rep = /^\ ...

  5. js正则匹配的一个日常应用

    应用实例 1 /** 将段落中的 \n 转换为 <p></p>, 规范存储 */ 2 function formatParagraphForStore(val) { 3 var ...

  6. jS正则和WEB框架Django的入门

    JS正则 -test 判断字符串是否符合规定的正则表达式 -exec 获取匹配的数据 test的例子: 从上述的例子我们可以看出,如果rep.test匹配到了就返回true,否则返回false exe ...

  7. js正则实现二代身份证号码验证详解

    js正则实现二代身份证号码验证详解 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至 ...

  8. js 正则 以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“

    js  正则  以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“ var reg = /^[a-zA-Z]{1}(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d_@ ...

  9. 手机号码js正则验证

    手机号码js正则验证 var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/; if (!myreg.test($(" ...

随机推荐

  1. 学习笔记: yield迭代器

    yield 与 IEnumerable<T> 结对出现, 可实现按需获取 , 迭代器模式 static void Main(string[] args)         {         ...

  2. 【JAVA】servlet 定时启动

    步骤一: web.xml中加上如下的代码: <load-on-startup>10</load-on-startup>这句话是重点. <servlet> <s ...

  3. 微服务化不同阶段 Kubernetes 的不同玩法

    本文由  网易云发布. 作为容器集群管理技术竞争的大赢家,Kubernetes 已经和微服务紧密联系,采用 Kubernetes 的企业往往都开始了微服务架构的探索.然而不同企业不同阶段的微服务实践面 ...

  4. HDFS及其各组件的机制

    一.HDFS运行机制 概述:用户的文件会被切块后存储在多台datanode节点中,并且每个文件在整个集群中存放多个副本,副本的数量可以通过修改配置自己设定. HDFS:Hadoop Distribut ...

  5. 6101 最优贸易 (双向spfa)

    描述C国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的 ...

  6. python可视化pyecharts

    python可视化pyecharts 简单介绍 pyecharts 是一个用于生成 Echarts 图表的类库.Echarts 是百度开源的一个数据可视化 JS 库.用 Echarts 生成的图可视化 ...

  7. System优化

    从系统方面考虑,性能通常取决于connection的连接效率和Integration Service所在机器的负荷程度,常见的原因有: 多用户同时使用 不同的网络协议 网络上有多个路由及转换 源和目标 ...

  8. ASP.NET Core 3.0预览版体验

    目前.NET Core 3.0的版本为.NET Core 3.0 Preview 3,对应ASP.NET Core 3.0 Preview 3. ASP.NET Core 3.0 之后将不再支持.NE ...

  9. webpack打包后该如何访问项目?

    一.问题描述 开发环境,页面浏览都OK,产出文件后,直接打开产出目录的index.html,页面空白. 二.预期结果 能正常看到页面. 三.问题分析 你可能会在编译的最后看到如下一句话: Tip: b ...

  10. [R]dplyr及ggplot2中的变量引用列的问题

    问题描述: 存在这么一个场景,当需要动态选择列作为dplyr或ggplot2的输入时,列名的指定会出现问题. 以iris举例: # 以iris dataset为例 colnames <- c(& ...