特殊字符总结
所谓特殊字符就是具有特殊含义的字符,若要匹配这些特殊字符,必须首先使字符”转义”,即,将反斜杠字符\ 放在它们前面。
特殊字符 | 含义 |
---|---|
$ | 匹配输入字符的结尾位置 |
() | 标记字表达式开始和结束的位置 |
* | 匹配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} | 限定符 |
^, $, \任何元字符、任何字符 | 定位点和序列(即:位置和顺序) |
| | 替换,”或”操作 |
字符具有高于替换运算符的优先级,使得”m | food”匹配”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