微博,朋友圈常用正则匹配
1 | 匹配粗体中括号间的内容(也带上两边的粗体中括号) |
1 | (?<=xxx)是以xxx开头的字符串, 但不包含xxx本身。 |
转义字符
1 | 正斜杠(/)与反斜杠(\) |
| 转义序列 | 字符 |
|---|---|
| \’ | 单引号 |
| \” | 双引号 |
| \ | 反斜杠 |
| \0 | 空 |
| \a | 警告 |
| \b | 退格 |
| \f | 换页 |
| \n | 换行 |
| \r | 加车 |
| \t | 水平制表符 |
| \v | 垂直制表符 |
正斜杠/,网址、Url地址。
正则表达式-问号的用法
1、匹配问号
因为?在正则表达式中有特殊的含义,所以如果想匹配?本身,则需要转义,\?
2、有无量词
问号可以表示重复前面内容的0次或一次,也就是要么不出现,要么出现一次。
3、贪婪\非贪婪匹配
在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配
示例:匹配字符串abcabcabc
1 | a.*c 结果:abcabcabc |
4、 预见匹配
简单说,就是匹配时考虑预见匹配的那一部分,不符合的不能算匹配上,但匹配的结果部分(变量$&)要除去预见匹配部分,又分两种。
1)肯定预见匹配 /pattern(?=string)/;匹配时,要考虑符合string
遇见功能,”?=”,意识说目标串中肯定存在什么,比如:
1 | var str="ab45555"; |
2 否定预见匹配 /pattern(?!string)/;匹配时,要考虑不符合string的才行,结果$&仍然只是取patern部分,不包括string
“?!”,意思说目标串中不应该存在什么var str=”ab1”;
1 | var str="ab45555"; |
(?=p) :零宽正向先行断言,要求接下来的字符串都与 p 匹配,但不能包含匹配 p 的那些字符
(?!p) :零宽负向先行断言,要求接下来的字符串不与 p 匹配
(出自《JavaScript权威指南》)
1 | (?<=xxx)是以xxx开头的字符串, 但不包含xxx本身。 |
几个常用的非贪婪匹配Pattern
1 | - *? 重复任意次,但尽可能少重复 |
示例
1 | #([^@]+?)# #不以@开头字符重复1次或更多# |
正则表达式基本语法
1、正则表达式常见字符
1 | test # 匹配包含test的字符串 |
2、正则表达式特殊字符
1 | \d # 数字,等同于[0-9] |
3、正则表达式数量词(重复)
贪婪量词*和+
惰性(非贪婪)(最少重复匹配)量词?
1 | c* # 匹配字符"c" 0或无限次 *=重复0次或更多次 |
4、正则表达式逻辑或分组
1 | c|b # 匹配"c"或"b" |
5、定位点(锚字符、边界)
^ 匹配开始的位置。将 ^ 用作括号[]表达式中的第一个字符,则会对字符集求反。$ 匹配结尾的位置。\b 与一个字边界匹配,如er\b 与“never”中的“er”匹配,但与“verb”中的“er”不匹配。\B 非边界字匹配。
正则在OC中,在遇到\d,\.等情况需要转义 \\d ,\\.
1 | 匹配手机号--手机号以13,14-18开头,9个 \d 数字字符 |
注意
1 | 1. \w 匹配包括下划线的任何单词字符,但不包含标点符号如',',它等价于[A-Za-z0-9_];(也即字母,数字,下划线) |
示例
1 | ^[\u4e00-\u9fa5]{0,}$ 全中文 |
正则工具
https://www.regextester.com/ 正则错误有提示
可视化,用来验证正则是否正确
https://www.regexplanet.com/support/similar.html
生成代码
http://tools.guardui.net/regex/create_reg.html
参考
https://github.com/aloisdg/awesome-regex
http://www.jianshu.com/p/cca5519a9367
http://www.cnblogs.com/hustskyking/archive/2014/01/18/how-regular-expressions-work.html
https://www.qcloud.com/community/article/675364001489391659?fromSource=gwzcw.92887.92887.92887
https://www.zhihu.com/question/48219401
http://www.jb51.net/tools/regex.htm
[正则表达式\w]+,\w+,[\w+] 三者区别? [],[ABC]+,[\w./-]+ 表达什么?
escapeRegExp
https://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url
https://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex