JS正则表达式

优先权顺序


从高到底
\ 转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \anymetacharacter 位置和顺序

字符类匹配


. 除了换行符和其他Unicode行终止符之外的任意字符
\w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
\W 任何不是ASCII字符组成的单词,等价于[^a-zA-Z0-9]
\s 任何Unicode空白符
\S 任何非Unicode空白符的字符
\d 任何ASCII数字,介于[0-9]
\D 除了ASCII数字之外的任何字符,等价于[^0-9]
\b 退格直接量

字符类:锚字符 匹配


$ 匹配字符串的结尾,在多行检索中,匹配一行的结尾
^ 匹配字符串的开头,在多行检索中,匹配一行的开头
\A 只有匹配字符串开始处
\b 匹配单词边界,词在 []内时无效
\B 匹配非单词边界
\G 匹配当前搜索的开始位置
\Z 匹配字符串结束处或行尾
\z 只匹配字符串结束处

正则表达式修饰符


 字符      含义                                                                           
i        执行不区分大小写的匹配                                                           
g        执行一个全局匹配,即找到所有匹配而非一次匹配
m        多行匹配模式,^匹配一行的开头和字符串开头,$匹配行的结束和字符串的结尾

RegExp 对象常用方法


test():检索字符串中的指定值。返回值是布尔值。
exec():返回一个数组,数组中的第一个条目是第一个匹配,其他的是反向引用
compile() 既可以改变检索模式,也可以添加或删除第二个参数。

exec()方法

如果匹配返回一个数组,格式如下:
[匹配的文本[,括号匹配的文本(可能多项)] ],属性:匹配到位置下标(index),原始文本(input)]
详见mdn,否则返回null, 然后更新正则表达式的属性,例如lastIndex, 下次匹配的下标。果然不是全局模式"g",lastIndex一直为0;

String 对象中常用正则相关方法


方法                     含义
match(pattern)          返回 pattern 中的子串或 null
replace(pattern, replacement)   用 replacement 替换 pattern
search(pattern)        返回字符串中 pattern 开始位置(查找到即返回,没有全局模式) 没有返回-1
split(pattern)            返回字符串按指定 pattern 拆分的数组

match方法

/*使用 match 方法获取匹配数组*/ 
var pattern = /box/ig;//全局搜索 
var str = 'This is a Box!,That is a Box too';           
alert(str.match(pattern)); //匹配到两个 Box,Box 全局模式下没有反向应用
console.log(str.match(pattern).length);//获取数组的长度 2
/* 非全局模式下类似exec()返回结果,但只能匹配到第一个, 不会像exec()会更新正则表达式lastIndext
所以以上去掉'g'结果为:
["Box", "B", index: 10, input: "This is a Box!,That is a Box too"] 数组长度为2, 后面是属性
*/

正则表达式转义


\ / [ ] () { } ? + * | . ^ $

需要用\来转义, 表示匹配本身. \前缀不能使字母或数字字面化, 特殊转义:

\f :换页符   \n :换行符   \r :回车符   \t :制表(tab)符

常用的正则表达式


去掉首尾空白

/^\s+ | \s+$/g

匹配中文字符

[\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内)

[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

匹配空白行

\n\s*\r

匹配HTML标记

<(\S*?)[ ^>]*>.*?|<.*? />

匹配Email地址

\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配网址URL

[a-zA-z]+://[^\s]*

其他

默认匹配是贪婪匹配,匹配尽可能长的字符串
有?修饰(+?, *?...)匹配尽可能短的字符串

疑惑点


  • .+-等一些字符在[]内不用转义

参考


参考博客
正则表达式测试

你可能感兴趣的:(JS正则表达式)