沙滩星空的博客沙滩星空的博客

正则表达式括号的用法总结

括号的种类

  • 小括号:(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): 异或匹配。匹配 adcd
  • (?: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
未经允许不得转载:沙滩星空的博客 » 正则表达式括号的用法总结

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址