正则表达式

正则表达式 2017-5-11

语法:
+ 号 代表前面的字符串可以至少出现一次 例如:kin+mos 可以匹配出 kinkinkink+mos
* 号 代表前面的字符串可以不出现或出现n次 例如:kin*mos 可以匹配出 kinkinkinmos
? 号 代表前面的字符最多只能出现一次 例如:kin?mos 可以匹配出 kinmos

非打印字符
\cx 号 匹配由x指明的控制字符 例如 \cM 匹配一个Control-M 或回车符 x的值必须是 A-Z 或者 a-z 之一,否则将c视为一个原义的c字符
\f 号 匹配一个换页符 等价于 \x0c 和 \cL
\n 号 匹配一个换行符 等价于 \x0a 和 \cJ
\r 号 匹配一个回车符 等价于 \x0d 和 \xM
\s 号 匹配任何空白字符 包括空格 制表符 换页符等 等价于 [ \f\n\r\t\v]
\S 号 匹配任何非空白字符 等价于 [^ \f\n\r\t\v]
\t 号 匹配一个制表符 等价于 \x09 和 \cl
\v 号 匹配一个垂直制表符 等价于 \x0b 和 \cK

特殊字符
特殊字符 比如 上面说的 + 号这种,如果需要找到 字符串中的 +号,需要 用\ 转义 \+
$ 匹配输入字符串的结尾位置
. 匹配除换行符\n 的所有字符
() 标记一个子表达式的开始和结束位置
[ 标记一个中括号表达式的开始
\ 将下一个字符标记为 或特殊字符 或原义字符 或向后引用 或八进制转义符
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合
{ 标记限定符表达式的开始
| 指明两项之间的一个选择

限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能够满足匹配
*
+
?
{n} n是一个非负整数 匹配确定的 n次,例如:'o(2)' 不能匹配 bob中的 o 但是只能能匹配boob中的两个o
{n,} n是一个非负整数 至少匹配n次,例如 'o(2,)' 不能匹配 bob 但是能匹配 booob
(n,m) m,n 都是非负整数 其中 n<=m 最少匹配n次最多匹配 m 次

例子:
如要匹配一个字符串全是数字 / [1-9][0-9]*/ 意思是,第一位是1-9的数字,第二位及以后n位均是 0-9的数字

如果要匹配 <你们好> 标签内的所有内容 /<.*>/

定位符
定位符能够将正则固定到行尾或行首
^ 匹配输入字符串开始的位置
$ 匹配输入字符串结尾的位置
\b 匹配一个字的边界 即字与空格间的位置
\B 非字边界匹配
例子:
例如需要匹配一个文章的章节 /^Chapter [1-9][0-9]*$] 代表从一行的开始到结尾只有这样的字符 Chapter99999
/\bKin/ 匹配 Kinmos 这样的字符 /mos\b/匹配 kinmos这样的字符而并不能匹配 mosKin
/\Bmo/ 匹配 kinmos 却不匹配moskin

反向引用
对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储,
缓冲区编号从1 开始 ,最多可以存储99个捕获的子表达式,每个缓冲区都可以使用 \n 访问,其中 n 为一个标识特定缓冲区 的一位或两位十进制数

可以使用非捕获元字符 ?: ?= ?! 来重写捕获,忽略对相关匹配的保存
例子:
匹配重复的单词
var str="It is itt is you like you";
var preg=/\b([a-z]+) \1\b/;
document.wrote(str.match(preg));
捕获的表达式,正如[a-z]+ 指定的,包括一个或多个字母,正则表达式的第二部分是对以前捕获的子匹配项的引用,即单词的第二个匹配项正好由括号表达式匹配, \1 指定第一个子匹配项

分解url
var str="http://www.kinmos.cn:80/index";
var preg=/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
console.log(str.match(preg));

第一个括号子表达式捕获web地址的协议部分,该子表达式匹配在冒号和两个正斜杠前面的任何单词
第二个括号子表达式捕获地址的域地址部分,子表达式匹配 / 和 : 之外的一个或多个字符
第三个括号子表达式捕获端口 该子表达式匹配冒号后面的零个或多个数字,只能重复一次该子表达式
第四个括号捕获Web地址指定的路径和页信息,该子表达式能匹配不包括 # 或空格字符的任何字符序列

元字符
[xyz] 字符集合 匹配所保安的任意一个字符
[^xyz] 负值字符集合 匹配未包含的任意字符
[a-z] 字符范围,匹配指定范围内的任意字符
[^a-z] 负值字符范围
\d 匹配一个数字字符 等价于 [0-9]
\D 匹配一个非数字字符
\f 匹配一个换页符
\n 匹配一个换行符
\s 匹配任何空白字符
\w 匹配包括下划线的任何单词字符 等价于 [A-Za-z0-9_]
\W 匹配任何非单词字符

运算符优先级
正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式相似



posted on 2017-05-12 11:07  轻浮不韪  阅读(142)  评论(0编辑  收藏  举报