十个值得珍藏的正则表达式

正则表达式常学常忘,记规则不如记例子,记多不如记精,记例子就记最经典的。下面是本人珍藏的十个有用的正则表达式,不吝分享,以飨读者。

正则表达式要点

十个值得珍藏的正则表达式_第1张图片

几个记忆点

  • 小括号:代表分组
  • 中括号:代表集合
  • 大括号:代表个数
  • 尖括号不是元字符,下划线不是元字符,但破折号是
  • \s和\S, \b和\B, \w和\W的是三对对偶子,“小正大否”, 也就是小写的表示匹配,大写的表示不匹配。 \s匹配任何空白字符,\b匹配单词边界,\w匹配单词,对应的大写字母刚好反之。

实例

下面以javascript语言为例,展示正则表达式的经典例子,基本覆盖了基本用法。

1. 多个空行变成单空行

经常遇到别人给的文本文件,里面出现多个空行,一般IDE格式化也无能为力,怎么办?正则表达式可以派上用场。

let lines = `
djaidjsia
lllds
daskldas
dasdlas




dasklda




kaskldsad
`
// 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}/

十个值得珍藏的正则表达式_第2张图片

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

十个值得珍藏的正则表达式_第3张图片

总结

太史公曰:正则表达式是程序员手中的利剑,能解决许多人生中不大不小的烦恼。不会正则表达式不足语编程。有这十个正则表达式防身,没人再敢欺负你。

你可能感兴趣的:(前端,正则表达式,javascript)