读懂简单的正则表达式

读懂简单的正则表达式

最近学习过程中,遇到了一段用正则表达式验证email输入的代码
if(!/^\w+@\w+.\w+$/.test(value)){}//ps:这里的正则表达式有问题,后面已修正,看的书绝壁是盗版(╬▔皿▔)
便寻思查了一下正则表达式的一些用法,学习总结了一下

正则表达式是一种字符串匹配规则,可以用来检查一个字符串是否含有某种子串(可以是具体的子串或一类子串,如是否含有数字等等)、将匹配的子串做替换或者从某个字符串中取出符合某个条件的子串等,很多编程语言都对此有所支持,利用正则表达式对字符串进行操作

它就是对字符串进行操作的组合起来的一系列逻辑公式,即用事先定义好的一些特定的字符和特定字符的组合,组成的一个"字符串",最终对(如程序中给定的)字符串进行过滤(看是否匹配)

为什么不用一般的字符串的匹配判断呢?首先因为正则表达式具有极大的灵活性、逻辑性和功能性,其次可以用极简单的方式达到字符串的复杂控制

写正则表达式有点像搭积木,复杂的功能总可以拆分开来,由不同的元素(也就是子表达式)对应,再用合适的关系将它们组合起来

正则表达式的常见用法:

1.两个特殊的符号'^'和'$'。他们的作用是分别指出一个字符串的开始和结束。例子如下:
"^The":表示所有以"The"开始的字符串("There","The cat"等)
"of despair$":表示所以以"of despair"结尾的字符串
"^abc$":表示开始和结尾都是"abc"的字符串,只有"abc"自己了
"abcd":表示任何包含"abcd"的字符串

2.再如'*','+'和'?'这三个符号,分别表示大于等于0个,大于等于1个,0或1个同一字符或字符串出现的次数。例子如下:
"ab*":表示字符串中a后面跟着零个或若干个b。("a", "ab", "abbb",……)

"ab+":表示字符串中a后面跟着至少一个b或者更多

"a(bc)+":表示在字符串中a的后面跟至少一个"bc"子字符串

"ab?":表示字符串中a后面跟着零个或者一个b
"a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b

或者用{}代替上述字符。如:
"ab{2}":表示一个字符串有一个a跟着2个b("abb")
"ab{1,}":表示一个字符串有一个a跟着至少1个b        //但是ab{ ,3}这样的语法是不行的
"ab{3,5}":表示一个字符串有一个a跟着3到5个b
"ab{0,1}":表示一个字符串有一个a跟着0或1个b

3.特殊字符'.'可以替代任何字符。如:
"a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字//[0-9]代表0-9之间的任意数字
"^.{3}$":表示有任意三个字符的字符串(长度为3个字符)

还有"|"表示”或“,如:
"(a¦b)*c":表示一串"a""b"混合的字符串后面跟一个"c",相当于[ab]*ca

4.上面的方括号'[]'表示某些字符允许在一个字符串中的某一特定位置出现,如:
"[ab]":表示一个字符串有一个"a"或"b"(相当于"a|b");
"[a-d]":表示一个字符串包含小写的'a'到'd'中的一个(相当于"a|b|c|d"或者用"[abcd]");
"^[a-zA-Z]":表示一个以字母开头的字符串;
"[0-9]%":表示一个百分号前有一位的数字;
",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。

你也可以在方括号里用'^'(相当于c/c++中的异或)表示不希望出现的字符,'^'应在方括号里的第一位。(如:"%[^a-zA-Z]%"表示两个百分号中不应该出现字母)。

假若想输出展示这些特定的字符,则必须在"^ . $ () | * + ? { \"这些字符前加上转义字符'\'

\w:用于匹配字母,数字或下划线字符
\d:用于匹配从0到9的数字

通过上面的知识便可以明白这个email的验证if(!/^\w+@\w+.\w+$/.test(value)){}中正则表达式的含义了,连个"/"之间的便是正则表达式,"^"与"$"之间的字符串必须要完全符合匹配规则,"\w"表示用于匹配的字母、数字或下划线,"+"表示必须要有至少1个以上的字符,总结起来就是我们常规的email格式的思维,即XXX@XXX.XXX(如1234567@qq.com)
个人认为正则表达式/^\w+@\w+.\w+$/应该修改为/^(\w)+@(\w)+((\.)\w+)$/,括号"()"用不用无所谓,只是为了方便理解,因为要检测"."应该用转义字符"\."表示,经测试证明确实如此
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值