Regexper,图形化正则表达式

Regexper

在这里插入图片描述

/Win(?:dows)?\s?([^do]{2})\s?(\d+\.\d+)?/

在这里插入图片描述

元字符

元字符 说明
\ 转义
. 匹配除换行符以外的任意字符
^ 匹配开头
$ 匹配结尾
? 重复一次或零次
+ 重复一次或多次
* 重复零次或多次
| 多选分支
{n} 重复n次
{n,} 至少重复n次
{n,m} 至少重复n次,但不超过m次
[] 字符组
() 捕获组

其他字符

- 说明
\d 匹配数字
\D 匹配非数字
\s 匹配空格
\S 匹配非空格
\w 匹配非特殊字符,比如大小写字母、数字
\W 匹配特殊字符

开头 和 转义

  • /^\///开头
    ^,匹配开头
    \/,转义为/

在这里插入图片描述
var r = /^\//;

序号 测试 返回
1 "/".match(r) [ '/', index: 0, input: '/', groups: undefined ]
2 "/dist".match(r) [ '/', index: 0, input: '/dist', groups: undefined ]
3 "a/".match(r) null
4 "12".match(r) null

开头 和 结尾

  • /^$/匹配空字符串
    ^,匹配开头
    $,匹配结尾

    在这里插入图片描述

var r = /^$/;

序号 测试 返回
1 "".match(r) [ '', index: 0, input: '', groups: undefined ]
2 "a".match(r) null
3 "1".match(r) null

开头 转义 和 结尾

  • /^\/?$/,匹配空字符串和斜杠/
    ^,匹配开头
    \/,转义为/
    $,匹配结尾

    在这里插入图片描述

var r = /^\/?$/

序号 测试 返回
1 "".match(r) [ '', index: 0, input: '', groups: undefined ]
2 "/".match(r) [ '/', index: 0, input: '/', groups: undefined ]
3 "//".match(r) null
4 "/dist".match(r) null
5 "abc".match(r) null

字符组

  • /[do]/匹配任意字符串,只要该字符串中包含字符do

    在这里插入图片描述

var r = /[do]/

序号 测试 返回
1 "d".match(r) [ 'd', index: 0, input: 'd', groups: undefined ]
2 "o".match(r) [ 'o', index: 0, input: 'o', groups: undefined]
3 "do".match(r) [ 'd', index: 0, input: 'do', groups: undefined]
4 "od".match(r) [ 'o', index: 0, input: 'od', groups: undefined]
5 "doo".match(r) [ 'd', index: 0, input: 'doo', groups: undefined]
6 "ood".match(r) [ 'o', index: 0, input: 'ood', groups: undefined]
7 "done".match(r) [ 'd', index: 0, input: 'done', groups: undefined]
8 "dad".match(r) [ 'd', index: 0, input: 'dad', groups: undefined]
9 "horse".match(r) [ 'o', index: 1, input: 'horse', groups: undefined]
10 "had".match(r) [ 'd', index: 2, input: 'had', groups: undefined]
11 "one".match(r) [ 'o', index: 0, input: 'one', groups: undefined]
12 "git".match(r) null

排除字符组

^[]内,表示要排除的字符组

  • /[^do]/匹配任意字符串,只要该字符串中包含除字符do以外的其他字符
    在这里插入图片描述

var r = /[^do]/

序号 测试 返回
1 "d".match(r) null
2 "o".match(r) null
3 "do".match(r) null
4 "od".match(r) null
5 "doo".match(r) null
6 "ood".match(r) null
7 "done".match(r) [ 'n', index: 2, input: 'done', groups: undefined]'
8 "dad".match(r) [ 'a', index: 1, input: 'dad', groups: undefined]
9 "horse".match(r) [ 'h', index: 0, input: 'horse', groups: undefined]
10 "had".match(r) [ 'h', index: 0, input: 'had', groups: undefined]
11 "one".match(r) [ 'n', index: 1, input: 'one', groups: undefined]
12 "git".match(r) [ 'g', index: 0, input: 'git', groups: undefined]

排除字符组 和 重复

^[]内,表示排除字符;{n},重复n

  • /[^do]{2}/匹配任意字符串,只要该字符串中至少包含两个除字符do以外的其他字符
    在这里插入图片描述

var r = /[^do]{2}/

序号 测试 返回
1 "d".match(r) null
2 "o".match(r) null
3 "do".match(r) null
4 "od".match(r) null
5 "doo".match(r) null
6 "ood".match(r) null
7 "done".match(r) [ 'n', index: 2, input: 'done', groups: undefined]
8 "dad".match(r) null
9 "horse".match(r) [ 'rs', index: 2, input: 'horse', groups: undefined]
10 "had".match(r) [ 'ha', index: 0, input: 'had', groups: undefined]
11 "one".match(r) [ 'ne', index: 1, input: 'one', groups: undefined]
12 "git".match(r) [ 'gi', index: 0, input: 'git', groups: undefined]

捕获组

  • /Win(dows)\s?([^do]{2})\s?(\d+\.\d+)?/
    (dows)是第一个捕获组
    ([^do]{2})是第二个捕获组
    (\d+\.\d+)是第三个捕获组

在这里插入图片描述

  • string.match(r)
    返回一个类数组。其中,
    第一个元素是匹配的完整字符串,Windows NT 6.1
    第二个元素是与捕获组(dows)匹配的内容,dows
    第三个元素是与捕获组([^do]{2})匹配的内容,NT
    第四个元素是与捕获组 (\d+\.\d+)匹配的内容,6.1
var r = /Win(dows)\s?([^do]{2})\s?(\d+\.\d+)?/;
console.log("Windows NT 6.1".match(r));
//['Windows NT 6.1','dows','NT','6.1',index: 0,input: 'Windows NT 6.1']
  • r.test(string)
    返回布尔值,true|false
    与捕获组匹配的内容会保存在RegExp.$1~$9
    与第一个捕获组(dows)匹配的内容保存在RegExp.$1
    与第二个捕获组([^do]{2})匹配的内容保存在RegExp.$2
    与第三个捕获组(\d+\.\d+)匹配的内容保存在RegExp.$3
var r = /Windows\s?([^do]{2})\s?(\d+\.\d+)?/;
r.test("Windows NT 6.1");//返回true
console.log(RegExp.$1,RegExp.$2,RegExp.$3);//输出 dows NT 6.1 

非捕获组

(?:)
非捕获组(?:) 和 捕获组()类似,区别是,它不会把 与其匹配的内容 保存起来,所以比较节省内存。

  • /Win(?:dows)\s?([^do]{2})\s?(\d+\.\d+)?/
    在这里插入图片描述
var r = /Win(?:dows)\s?([^do]{2})\s?(\d+\.\d+)?/;
console.log("Windows NT 6.1".match(r));
//['Windows NT 6.1','NT','6.1',index: 0,input: 'Windows NT 6.1']

r.test("Windows NT 6.1")
console.log(RegExp.$1,RegExp.$2,RegExp.$3);//NT 6.1 undefined
  • /industr(?:y|ies)/
    在这里插入图片描述

(?=)

  • /Win(?:dows)?\s?(?=98|NT)/
var r = /Win(?:dows)?\s?(?=98|NT)/;
console.log("WinNT".match(r));//[ 'Win', index: 0, input: 'WinNT']
console.log("Win 98".match(r));//[ 'Win ', index: 0, input: 'Win 98']
console.log("Windows NT 6.1".match(r));//[ 'Windows ', index: 0, input: 'Windows NT 6.1']
console.log(r.test("WinNT"));//输出true
console.log(r.test("Win 98"));//输出true
console.log(r.test("Windows NT 6.1"));//输出true

在这里插入图片描述

  • /^\/?(?=\/|$)/
    匹配以下四种情况:
    • 空字符串
    • 斜杠/
    • /开头的字符串
    • /开头,且以/结尾的字符串
      在这里插入图片描述

参考文章

正则表达式高级用法(分组与捕获)
非捕获

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章