十个值得珍藏的正则表达式
正则表达式常学常忘,记规则不如记例子,记多不如记精,记例子就记最经典的。下面是本人珍藏的十个有用的正则表达式,不吝分享,以飨读者。
正则表达式要点
几个记忆点
- 小括号:代表分组
- 中括号:代表集合
- 大括号:代表个数
- 尖括号不是元字符,下划线不是元字符,但破折号是
- \s和\S, \b和\B, \w和\W的是三对对偶子,“小正大否”, 也就是小写的表示匹配,大写的表示不匹配。 \s匹配任何空白字符,\b匹配单词边界,\w匹配单词,对应的大写字母刚好反之。
实例
下面以javascript语言为例,展示正则表达式的经典例子,基本覆盖了基本用法。
1. 多个空行变成单空行
经常遇到别人给的文本文件,里面出现多个空行,一般IDE格式化也无能为力,怎么办?正则表达式可以派上用场。
let lines = `
djaidjsia
lllds
daskldas
dasdlasdaskldakaskldsad
`
// str = lines.replace(/^(\s*\n){2,}/, "\n")
str = lines.replace(/^\s*[\r\n]|^\s+| +(?= )| +$|\s+$(?![^])/gm, '\n');
console.log(str)
在IntelliJ idea里可以运用上述表达式做全局替换。
2. 符合强度的密码
长度8到18位,至少1个字母,1个数字和1个特殊字符
/^(?=.\d)(?=.[a-z])(?=.[A-Z])(?=.[!@#KaTeX parse error: Expected group after '^' at position 1: ^̲&*()_-]).{8,18}/
3. 有效的身份证号码(十八位)
十八位的公民身份号码,排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
var pattern = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
console.log(p.test("11010519501130002X"));
4. 提取网页中所有超链接
(?i)<a([^>]+)>(.+?)</a>说明:
?i表示大小写敏感,[^>]+表示匹配任何字符串,但不包含>
5. 匹配HTML标签
<("[^"]*"|'[^']*'|[^'">])*>< #start with opening tag "<"( # start of group #1"[^"]*" # only two double quotes are allow - "string"| # ..or'[^']*' # only two single quotes are allow - 'string'| # ..or[^'">] # cant contains one single quotes, double quotes and ">") # end of group #1* # 0 or more
> #end with closing tag ">"
>
6. 匹配IP地址
^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.
([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$
7. 检查Email地址
\b[\w.!#$%&’*+\/=?^`{|}~-]+@[\w-]+(?:\.[\w-]+)*\b
8. 不包含字符串
不包含hello:
var pattern = /^((?!hello).)*$/
console.log(pattern.test('abhellocba'))
console.log(pattern.test('abhellcba'))
不包含hello,也不包含world:
pattern = /^((?!hello)(?!world).)*$/
console.log(pattern.test('abhellocba'))
console.log(pattern.test('abhellcba'))
9. 检查中文和CJK字符(中日韩字符)
指定中文的unicode编码区间来匹配中文:
^[\\u4e00-\\u9fa5]{0,}$
检查CJK字符,采用:
([\u4e00-\u9fff]+|[\uff00-\uffef]+)
同理,还可以指定字符的unicode编码来匹配货币代码:
(?=.*\d+)(?=.*[\u00A5\uFFE5\uFFE1\u5713\uFF04\u20A4\u0024\u5186]+)
10. 匹配十六进制数
/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
总结
太史公曰:正则表达式是程序员手中的利剑,能解决许多人生中不大不小的烦恼。不会正则表达式不足语编程。有这十个正则表达式防身,没人再敢欺负你。
十个值得珍藏的正则表达式相关推荐
- 有关古文的C语言编程题,这80道国学题,既经典又有趣!值得珍藏!
原标题:这80道国学题,既经典又有趣!值得珍藏! 点击箭头所指的世界名著每日读,每日陪你有品位地阅读 编辑:世界名著每日读(ticesmall) 1."但愿人长久,千里共婵娟",其 ...
- php面试中的问题,十个值得深思的PHP面试问题
十个值得深思的PHP面试问题 过来人在以往的面试中总结的10个值得深思的 PHP 面试问题,希望对你现在的面试有用,少走弯路,更多内容请关注应届毕业生网! Q1 第一个问题关于弱类型 $str1 = ...
- 10个值得珍藏的4K高清壁纸网站推荐
作为打开电脑 or 手机第一眼就看到的桌面,给它设置一个赏心悦目的桌面壁纸还是必不可少的. 下面分享了 10 个值得珍藏的高清桌面壁纸网站,支持各种图片比例和分辨率,从 720P 到 4K.8K 应有 ...
- 11个值得珍藏的4K高清壁纸网站推荐
前言 由于前几天因需求须找一些视觉素材,翻来覆去整了一些,整理了10个图片素材网站可以给大家收藏使用& 作为打开电脑 or 手机第一眼就看到的桌面,给它设置一个赏心悦目的桌面壁纸还是必不可少的 ...
- 我的世界基岩版种子和java版种子_我的世界:值得珍藏3个种子,号称MC最“完美”的三座山脉!...
通常来说,<我的世界>很少生成一些神奇的山脉.只有巨大化世界地形下,才有可能产生神奇而美丽的山脉.而今天,我叫Minecraft将改变你的想法! 巨大化世界下的"山脉" ...
- 值得珍藏的81句生活哲理名言
值得珍藏的81句生活哲理名言 1. 每天告诉自己一次,『我真的很不错』 2. 生气是拿别人做错的事来惩罚自己 3. 生活中若没有朋友,就像生活中没有阳光一样 4. 明天的希望,让我们忘了今天的痛 ...
- html如何实现选项卡切换思路,Tab选项卡切换完整思路及实现,值得珍藏
原标题:Tab选项卡切换完整思路及实现,值得珍藏 这篇文章是从微信上转载过来的,原文作者是"Java实例解析",文章内容很棒,只是这个作者可能是一时看不到效果,所以没更新几篇就放弃 ...
- [读书社区]值得珍藏的81句名言...
[读书社区]值得珍藏的81句名言... 1. 每天告诉自己一次,『我真的很不错』 2. 生气是拿别人做错的事来惩罚自己 3. 生活中若没有朋友,就像生活中没有阳光一样 4. 明天的希望,让我们忘了今天 ...
- 人生值得珍藏的42句话
人生值得珍藏的42句话 [%=@title%] [%=@count%]票 [[%=@percent%]%] 1.生气是拿别人做错的事来惩罚自己. 2.明天的希望,让我们忘了今天的痛苦. 3.发光并非太 ...
最新文章
- 图解 Attention
- java连接oracle增删改查,java连接oracle数据库实现增删改查
- 深入理解ROS技术 【2】ROS下的模块详解(66-128)
- MyBatis 集成到Spring 的原理是什么?
- Apollo进阶课程⑭ | Apollo自动定位技术——三维几何变换和坐标系介绍
- 搭建深度学习推荐系统实战
- MapGuide应用开发系列(11)----创建自己的第一个MapGuide应用程序
- CS5463代码模块解析(包含下载链接)
- 欢迎来到大数据时代-----赶快来了解一些大数据的基础知识
- 找回win10自带的windows照片查看器
- 币须知道 |马云又抢占了一块高地,蚂蚁金服区块链跨境汇款正式落地,2018世界杯板块排名涨幅第一...
- error::make_unique is not a member of ‘std’
- mysql 42000 1064_mysql主从复制或其他操作报错ERROR 1064 (42000): You have an er
- STP特性(Cisco)
- Qt 自定义悬浮窗(带动画,类似QQ拼音输入法)
- 如何对一年级小学生进行养成教育
- 51nod 1001
- 大牛证券解析恒指大跌800点+全球股市大跌
- Python如何把图片转为Base64字符串
- CWnd 对象怎么和 HWND 窗口句柄相互转化