正则表达式总结

特殊字符总结

所谓特殊字符就是具有特殊含义的字符,若要匹配这些特殊字符,必须首先使字符”转义”,即,将反斜杠字符\ 放在它们前面。

特殊字符含义
$匹配输入字符的结尾位置
()标记字表达式开始和结束的位置
*匹配0次或多次
+匹配1次或多次
.匹配除换行符 \n 之外的任何单字符
[标记一个中括号表达式的开始
?匹配0次或1次
^匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示非
|指明两项之间的一个选择

注:“<”、“>”都不属于特殊字符,所以匹配的时候不需要转义。

补充:“()”内为子表达式,它会将匹配的字符串储存起来,可以从产生的 Matches 集合得到。例:

var str = "http://www.runoob.com:80/html/html-tutorial.html";
var patt1 = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
arr = str.match(patt1);
for (var i = 0; i < arr.length ; i++) {
    document.write(arr[i]);
    document.write("<br>");
}

//http://www.runoob.com:80/html/html-tutorial.html ---总的匹配结果
//http  ---第一个子匹配的结果
//www.runoob.com    ---第二个子匹配的结果
//:80   ---第三个子匹配的结果
///html/html-tutorial.html  ---第四个子匹配的结果

限定符总结

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。

字符描述
*匹配0次或多次
+匹配1次或多次
?匹配0次或1次
{n}n 是一个非负整数。匹配确定的 n 次。
{n,}n 是一个非负整数。至少匹配n 次。
{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

注:* 、+限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。例如:

//贪婪
let pattern = /<.*>/;
let str = `<h1>test</h1>`;

console.log(pattern.exec(str)); //"<h1>test</h1>"

它会匹配小于、大于号之间的所有内容。下面来看一下非贪婪的匹配:

//非贪婪
let pattern = /<.*?>/;
let str = `<h1>test</h1>`;

console.log(pattern.exec(str)); //"<h1>"

补充元字符

字符描述
(pattern)匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到。
(?:pattern)匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
[xyz]字符集合。匹配所包含的任意一个字符。
[^xyz]是一个非运算,即不匹配x,y,z中的任何一个。
\d匹配一个数字字符。等价于 [0-9]。
\D匹配一个非数字字符。等价于 [^0-9]。
\w匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。
\W匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’。
\b匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配”never” 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B匹配非单词边界。’er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。

匹配顺序

运算符描述
\转义符
(),(?:)), (?=), []圆括号和方括号
*, +, ?, {n}, {n,}, {n,m}限定符
^, $, \任何元字符、任何字符定位点和序列(即:位置和顺序)
|替换,”或”操作
字符具有高于替换运算符的优先级,使得”mfood”匹配”m”或”food”。若要匹配”mood”或”food”,请使用括号创建子表达式,从而产生”(m

具体事例

^[a-zA-Z0-9_]{1,}$      // 所有包含一个以上的字母、数字或下划线的字符串 

^[a-zA-Z0-9_]+$      // 所有包含一个以上的字母、数字或下划线的字符串 

/a.c/   //匹配 aac、abc,以及 a1c、a2c、a-c 和 a#c

/Chapter [^12345]/  //匹配非 Chapter1,2,3,4,5

/\d{2}-\d{5}/   //验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。

let pattern = /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/;
let str = "2312321_yy@qq.com.cn";
let arr = pattern.test(str);
console.log(arr);   //true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值