括号的种类
- 小括号:(ab) -> 分组 /(ab)+/匹配一个或者多个连续的ab
- 中括号:[abc], [a-z] -> 匹配abc, a-z中的任意一个字符
- 大括号:{m, n} -> 匹配出现的次数 /a{1,3}/
[]匹配单个字符
中括号(方括号)[]
只能 匹配1个字符
,里面的内容表示 字符簇
, 使用 -
表示范围。
[a-z] // 匹配所有的小写字母
[A-Z] // 匹配所有的大写字母
[a-zA-Z] // 匹配所有的字母
[A-z] // 匹配所有的字母,同[a-zA-Z]
[0-9] // 匹配所有的数字
[0-9\.\-] // 匹配所有的数字、句号、减号
[ \n\f\r\t\v] // 匹配所有的空白字符(空格、换行符、换页符、回车符、水平制表符、垂直制表符)
[a-zA-z \&]+ // 提取包含英文字母空格和 & 符号的字符串
{}匹配次数限定符
花括号 {}
跟在 字符
或 字符簇
后面,用来确定前面的内容重复出现的次数,称为 限定符
。
- {3} :前面的字符或字符簇只出现3次;
- {3,} :前面的字符或字符簇出现3次或更多次;
- {3,5} :前面的字符或字符簇出现至少3次,至多5次;
除了{}
,还有 其他限定符
:*
:重复0次或多次,等价于:{0,}+
:重复1次或多次,等价于:{1,}?
:重复0次或1次,等价于:{0,1}|
:指明两项之间的一个选择,要匹配|,请使用|
()匹配分组
()
: 小括号分组符,用来匹配和提取数据。匹配内容示例:
(hello word)
: 整体匹配。匹配hello word
(ab|cd)
: 异或匹配。匹配ad
或cd
(?:ab)
: 仅匹配不捕获。仅使用分组功能,但不引用,不提取数据。
分组和分支结构
1.1 分组(ab)
小括号里的内容为 正则分组
var regex = /(ab)+/g;
var string = "ababa abbb ababab";
console.log( string.match(regex) ); // ["abab", "ab", "ababab"]
1.2 分支(ab|cd)
var regex = /^I love (JavaScript|Regular Expression)$/;
console.log( regex.test("I love JavaScript") ); // true
console.log( regex.test("I love Regular Expression") ); // true
引用分组(提取数据)
2.1 提取数据
var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
console.log( string.match(regex) );
// => ["2017-06-12", "2017", "06", "12", index: 0, input: "2017-06-12"]
上面的正则表达式,有3个 正则分组
。
match返回的一个数组: 第一个元素是整体匹配结果
,然后是各个 正则分组
(括号里)匹配的内容,然后是匹配下标,最后是输入的文本。(注意:如果正则是否有修饰符g,match返回的数组格式是不一样的)。
反向引用
var regex = /\d{4}(-|\/|\.)\d{2}\1\d{2}/;
var string1 = "2017-06-12";
var string2 = "2017/06/12";
var string3 = "2017.06.12";
var string4 = "2016-06/12";
console.log( regex.test(string1) ); // true
console.log( regex.test(string2) ); // true
console.log( regex.test(string3) ); // true
console.log( regex.test(string4) ); // false
\1
: 引用第1个 正则分组
匹配到的内容\10
: 引用第10个 正则分组
匹配到的内容
非捕获分组(?:ab)
只想用括号的分组功能,但不引用,不提取数据。
var regex = /(?:ab)+/g;
var string = "ababa abbb ababab";
console.log( string.match(regex) ); // ["abab", "ab", "ababab"]
模式修饰符
内联匹配模式,通常用内联匹配模式代替使用枚举值RegexOptions指定的全局匹配模式,写起来更简洁
- (?i)即匹配时不区分大小写。表示匹配时不区分大小写。
- (?s)即Singleline(单行模式)。表示更改.的含义,使它与每一个字符匹配(包括换行 符\n)。
- (?m)即Multiline(多行模式) 。 表示更改^和$的 含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的 精确含意是:匹配\n之前的位置以及字符串结束前的位置.)
- (?x):表示如果加上该修饰符,表达式中的空白字符将会被忽略,除非它已经被转义。
- (?e):表示本修饰符仅仅对于replacement有用,代表在replacement中作为PHP代码。
- (?A):表示如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分。比如说"/a/A"匹配"abcd"。
- (?E):与"m"相反,表示如果使用这个修饰符,那么"$"将匹配绝对字符串的结尾,而不是换行符前面,默认就打开了这个模式。
- (?U):表示和问号的作用差不多,用于设置"贪婪模式"。
正则表达式括号的作用 https://zhuanlan.zhihu.com/p/27355118
Regex 正则表达式中几个符号([ ] ^ {} ?: ?= ?)的概念https://blog.csdn.net/iOS1501101533/article/details/121434936
正则表达式 :(?s)(?i) ?: 表示的意思 https://blog.csdn.net/she562233590/article/details/52634187