正则表达式实践篇
简单的练习:题目
答案/^d{3}/ 。/[^abc]/ 。["123","456","7"] 。/b(?!th)w+b/ 。/^(?=.*d).{4,8}$/ 。首先.{4,8} 表示与包含 4-8 个字符的字符串匹配;然后.*表示单个字符(除换行符 n 外)零次或多次,且后面跟着一个数字,注意(?=)只匹配一个位置。/[u4e00-u9fa5]/ 。 当然,可能答案不唯一,不必较真啦~ 主要目的是回忆熟悉一下语法~ 真正的实践来了 要想在复杂性和完整性之间取得平衡,一个重要因素是要了解将要搜索的文本。
有时候处理各种极端情况会降低成本/收益的比例。所以某些情况下,不完全依赖正则表达式完成全部工作,比如某些字段用子表达式()括起来,让内存记忆下来,然后再用其他程序来验证。 不过本文还是从学习正则的角度出发,全部依赖正则表达式来写的哇~~ 匹配美元 正则表达式: |
|
|
还可以优化一下,合并前面的两个多选分支,得到:
[
01]?[
方法二:分类逻辑为第二个数字,可以分为两部分:[0-3]和[4-9]。为什么这么分?看看下面这个图就知道了,[0-3]多了一行(以2为第一个数字):
因此有两个多选分支,结果为:
分钟数比较简单,第一个数范围在0-5之间,第二个数在0-9之间,因此得到分钟数为:
小时部分用(?:)包起来,起到一个分组的作用,且不保存匹配项;
其实这个结果不能说完全正确,首先你要明白这个正则用在什么地方,比如是数据验证或者 情景一:填写表单中的字符串必须为24小时制的时间,那么可能第一个 情景二:用于复杂的字符串搜寻替换时,可能也会匹配这样子的字符串如’跑步用时19:50’,明显的,’19:50’表示19分50秒,而不是表示24小时制的时间19点50分。 匹配IP地址 IP地址的规则:点号分开的四个字段,每个字段在0-255之间。
如果一个字段是一个数或两个数,肯定是在0-255的范围内的; 从上面的陈述中我们就可以得到三个多选分支:
我们稍微合并一下这三个多选分支,得到:
我们再来看以2开头的三位数: 第二位数小于5的时候,第三位数范围[0-9]都可以;第二位数等于5的时候,第三位数范围[0-5] ,因此得到两个多选分支:
前两步合并起来,得到一个字段0-255的表示方法:
为什么第2个才是对的呢?我们看一下返回的input属性就了解了:
验证2:
|
1
2
3
4
5
6
7
8
9
|
" U'.match(/"(?:.|[^
"])*"/);
// 结果与期望符合:[""
"x3""]
// input: "I
"start "x3"
" U"
// [^
"]和.的位置调换
'I "
"]|.)*"/);
// 结果与期望不符合:[""
"x3"]
//
input:
[^"] 和. 的位置调换后,结果与期望不符合。那是因为[^"] 匹配start 后,遇到紧接着的" 不匹配,交给后面的多选分支. ,也不匹配,又刚好结束分隔符是 因此两个正则之间 正确的正则是
相关内容
|