JS正则练习集
基础练习:
//连续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正则练习集的更多相关文章
- js 正则之检测素数
原文:js 正则之检测素数 相信很多人应该看过这篇文章,我第一次看到的时候是11年的样子,那时候学vbs的时候看过这个问题.原文<检查素数的正则表达式>,在文章里已经解释了他是怎么判断的, ...
- js 正则之 判断密码类型
原文:js 正则之 判断密码类型 今天没啥写的,就分享个思路吧.之前在群里讨论的时候,谢亮兄弟说判断密码是否是纯数字,纯字母之类的.如果用 , 条判断,那就老长一大段了.这个思路是我之前看 jQuer ...
- Js正则Replace方法
JS正则的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\s+)|(\s+$)" ...
- js正则
JS正则 test:判断字符串是否符合规定的正则 rep = /\d+/; rep.test("asdfoiklfasdf89asdfasdf") # true rep = /^\ ...
- js正则匹配的一个日常应用
应用实例 1 /** 将段落中的 \n 转换为 <p></p>, 规范存储 */ 2 function formatParagraphForStore(val) { 3 var ...
- jS正则和WEB框架Django的入门
JS正则 -test 判断字符串是否符合规定的正则表达式 -exec 获取匹配的数据 test的例子: 从上述的例子我们可以看出,如果rep.test匹配到了就返回true,否则返回false exe ...
- js正则实现二代身份证号码验证详解
js正则实现二代身份证号码验证详解 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至 ...
- js 正则 以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“
js 正则 以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“ var reg = /^[a-zA-Z]{1}(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d_@ ...
- 手机号码js正则验证
手机号码js正则验证 var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/; if (!myreg.test($(" ...
随机推荐
- 金蝶K/3 跟踪语句_业务单据
跟踪语句_业务单据_BOM select * from t_TableDescription where Ftablename like '%ICBOM%' order by FFieldName o ...
- 安装elasticsearch-7.0.0(centos)
云主机上需设置root密码 sudo passwd root 回车后出入密码两次 jdk11页面 https://www.oracle.com/technetwork/java/javase/down ...
- 自学华为IoT物联网_07 物联网安全
点击返回自学华为IoT物流网 自学华为IoT物联网_07 物联网安全 1. 物联网安全的事件 事件1: 特斯拉事件 车载终端被入侵,通过CAN总线命令可远程控制车辆启停: 本地关键信息存储未做保护,印 ...
- 【Codeforces】【网络流】【树链剖分】【线段树】ALT (CodeForces - 786E)
题意 现在有m个人,每一个人都特别喜欢狗.另外还有一棵n个节点的树. 现在每个人都想要从树上的某个节点走到另外一个节点,且满足要么这个人自带一条狗m,要么他经过的所有边h上都有一条狗. 2<=n ...
- NEO GUI 多方签名使用
众所周至,NEOGUI是一个开发者演示用钱包,使用体验是非常的不友好的. 今天本来打算使用多方签名账户,发现和想象的不一样,请教了小伙伴也不行.遂调试了一下原因,发现踩进坑里了. 把这个问题记 ...
- 机器学习入门之python实现图片简单分类
小任务:实现图片分类 1.图片素材 python批量压缩jpg图片: PIL库 resize http://blog.csdn.net/u012234115/article/details/50248 ...
- RAID 0 ~ RAID 7
一.RAID解析1.RAID 0(1)将几块磁盘并行组合,横向写数据(2)并发IO,写数据最快缺点:不提供数据冗余,如果其中一块磁盘废掉,则数据全毁详细:条带深度大时,一次IO只能从一块磁盘上读取,无 ...
- Note of Jieba ( 词云图实例 )
Note of Jieba jieba库是python 一个重要的第三方中文分词函数库,但需要用户自行安装. 一.jieba 库简介 (1) jieba 库的分词原理是利用一个中文词库,将待分词的内容 ...
- nodejs+koa在header里面添加header信息
参考:https://koa.bootcss.com/ ctx.append('resultCode', '0000'); ctx.append('resultMessage', 'success') ...
- easy-ui 中的事件触发 (tree)
easy-ui可以为插件添加事件,但没有触发事件的处理(可能是未找到),所以有时候,我们需要通过程序去触发某个插件指定的事件时,就一筹莫展了 以Tree插件为例 ,添加了onClick事件 jQuer ...