task 1 : word boundaries(单词边界)
要求匹配 word 这个独个的单词。 /\bword\b/i
知识点
- 忽略大小写
/i
(insensitive) - 单词边界
\b
为边界 ,\B
不为边界\B
在不消耗\w
的情况下匹配\w
\b
在不消耗任何字符的情况下,立即被\w
匹配的字符和不被\w
匹配的字符匹配(按任何顺序)。它不能用来区分非词和词。
task 2 : capitalizing i (大写字母i)
要求把 所有 的 单个的 i 变成 大写 I /\bi\b/I/g
知识点
- 全部匹配而不是 只匹配一次
/g
task 3 : uppercase consonants (大写的辅音)
要求匹配大写的辅音字母
我的解法:/[B-DF-HJ-NP-TV-Z]/g
别人的解法:/[^AEIOUa-z_\W\d]/g
知识点
- 字符分类
task 4 : retrieve numbers (检索数据)
要求匹配 int 型 数字
我的第一次解法 /\D?\d+\D?/g
第二次 /\d+/g
知识点
贪婪与非贪婪,匹配个数a?
零个或一个aa*
零个或多个aa+
一个或以上aa{3}
3个aa{3,}
3个a以上a{3,6}
3到6个aa*
贪婪模式a*?
懒惰模式a*+
侵占模式
task 5 : whitespace (空格)
配置4个以上的空格
我的第一次结果/[[:space:]]{4,}/g
我的第二次结果/\s{4,}/g
知识点
空白字符 \s
和 [[:space:]]
匹配个数 a{4,}
4或更多个a
task 6 : broken keyboard (击毁键盘)
这关是说他按下一个键,有时候会被重复两次,但有时候不会,你需要把重复的那两次去掉。
我的答案 s/(.)\1\1/$1/g
知识点
\1
匹配时引用第一组$1
替换时引用第一组
task 7 : validate an ip
大佬的答案 (?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\.(?!$)|$)){4}
解释一下:匹配组重复4次:0-255的数字 + (.和不是结尾)|(结尾) 77分
我不会,百度一点后自己的解决方案 /^(?:(?:25[0-5]|2[0-4]\d|[0-1]?\d{1,2})\.){3}(?:25[0-5]|2[0-4]\d|[0-1]?\d{1,2})$/g
82分
然后按照大佬的规则稍微改进一下:/^(?:(?:25[0-5]|2[0-4]\d|[0-1]?\d{1,2})(?:\.(?!$)|$)){4}$/g
59分
最低的是 39分
知识点
|
0-199
|
200-255
121.005.154.138
是不是正规ip(?:xxxx)
不要分配 gorup 号
Task 8: HTML Tags (optional) (HTML标签 任选)
从字符串中去掉所有HTML标记。有些可能会换行且不完整 例如 body>xxxx</body
<.*>
太贪婪了,匹配到<div>foo</div>
了
我的答案是s/<[^<>]*>|[^<]*>|<[^<]*/g
我好菜 啊。
Task 9: Match an E-Mail (Simplified) (optional) (匹配邮件 简化 可选)
我的解法:/^([A-Za-z0-9!#$%&'*+\-\/=?^_
{|}]+|[A-Za-z0-9!#$%&'*+-/=?^_`{|}~]+.[A-Za-z0-9!#$%&'*+-/=?^_`{|}]+)@(([A-Za-z0-9]+|[A-Za-z0-9]+-+[A-Za-z0-9]+).)+([a-z]){2,6}$/gi`
淦