分享人:杨星
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。搜索模式可用于文本搜索和文本替换。
正则表达式是由一个字符序列形成的搜索模式。当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。正则表达式可以是一个简单的字符,或一个更复杂的模式。正则表达式可用于所有文本搜索和文本替换的操作。
正则表达式中包含三种元素分别为:量词、元字符、修饰符。
语法
/正则表达式主体/修饰符(可选)
其中修饰符是可选的。
举例:
方式一:直接量语法
var test = /jnshu/;
var test = /jnshu/i;
方式二:创建 RegExp 对象的语法
var test = new RegExp("jnshu");
var test = new RegExp("jnshu","i");
/123456/.test("12345"); // false
/123456/.test("123456"); // true
/123456/.test("x123456y"); // true 只要包含了指定的字符串,则为true
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。
y 执行“粘性”搜索,匹配从目标字符串的当前位置开始,可以使用y标志。
\d : 匹配数字 等价于[0-9]
\D : 匹配非数字 等价于[^\d]
\s : 匹配空白符
\S : 匹配非空白符 等价于[^\s]
\w : 用于匹配字母,数字或下划线字符(例如程序中的变量字符) 等价于[A-Za-z0-9_]
\W : 用于匹配所有与\w不匹配的字符 等价于[^\w]
举例:
/\d/.test("123"); // true
/\d/.test("1ab"); // true
/\D/.test("1ab"); // true
/\D/.test("112"); // false
字符类
匹配一类字符中的一个
[abc]: a或b或c
[0-9]: 一个数字
[^0-9]: 非数字的一个字符
[a-z]: 一个字母
. : 任一字符(换行除外)
多选分支
或
/thi(c|n)k/ === /thi[cn]k/ // thick或think
锚点
匹配一个位置
^ :起始位置
$ :结尾位置
\b :单词边界
举例:
/^http:/ /^http:/.test("http://www.jnshu.com") //true
/\.jpg$/ /\.jpg$/.test("1.jpg") // true
/\bis\b/ /\bis\b/.test("this is tom") // true
举例:
/http:\/\// /http:\/\//.test("http://www.jnshu.com") // true
贪 婪 惰 性 支 配 描 述
? ?? ?+ 零次或一次出现
* *? *+ 零次或多次出现
+ +? ++ 一次或多次出现
{n} {n}? {n}+ 恰好n次出现
{n,m} {n,m}? {n,m}+ 至少n次,最多m次出现
{n,} {n,}? {n,}+ 至少n次出现
举例:
/\d*/.test("abc") // true 数字可以出现0次到无穷次,所以是对的
/\d+/.test("abc") // false 数字至少出现1次到无穷次,所以是错的
/\d+/.test("1abc") // true 数字至少出现1次到无穷次,所以是对的
/https?:/.test("http://www.jnshu.com") // true s可以出现0次到1次,所以是对的
/https?:/.test("https://www.jnshu.com") // true
/https?:/.test("httpss://www.jnshu.com") // false s后面是:所以是错的
在JavaScript中,正则表达式进行匹配时默认使用的是贪婪匹配原则,即尽可能多的匹配字符串。例如,使用正则表达式/1{3,4}/来匹配字符串1111111,得到的结果为:1111和111。即先匹配4个字符,然后才匹配3个字符。
http://www.jnshu.com:8080/index.html?user=chenapo&age=99#home
| | | | | |
protocol | | | | |
hostname port | | |
\ / pathname search hash
host
() :捕获 /(jnshu)/
(?:) :不捕获 /(?:jnshu)/
Demo
by 杨星