正则表达式
正则好久不用了,几乎已经忘记了。复习下。
普通字符串
1、[ABC] 匹配 [...] 中的所有字符
var str = "123abcgoolebeijing"; var patt1 = /[aeiou]/g; document.write(str.match(patt1)); //输出:a,o,o,e,e,i,i
2、[^ABC] 匹配除[…]中所有字符
var str = "123abcgoolebeijing"; var patt1 = /[^aeiou]/g; document.write(str.match(patt1)); //输出:1,2,3,b,c,g,l,b,j,n,g
3、[A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母
4、. 匹配除换行符(\n、\r)之外的任何单个字符
5、[\s\S] 匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。
6、\w 匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
特殊字符
所谓特殊字符,就是一些有特殊含义的字符,若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。下表列出了正则表达式中的特殊字符:
特别字符 | 描述 |
---|---|
$ | 匹配输入字符串的结尾位置。 |
( ) | 标记一个子表达式的开始和结束位置。 |
* | 匹配前面的子表达式零次或多次。 |
+ | 匹配前面的子表达式一次或多次。 |
. | 匹配除换行符 \n 之外的任何单字符。 |
[ | 标记一个中括号表达式的开始。 |
? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。 |
\ | 将下一个字符转义。 |
^ | 匹配输入字符串的开始位置。在方括号表达式中使用,表示不接受该方括号表达式中的字符集合。 |
{ | 标记限定符表达式的开始。 |
| | 指明两项之间的一个选择。 |
选择
用圆括号 () 将所有选择项括起来,相邻的选择项之间用 | 分隔。
() 表示捕获分组,() 会把每个分组里的匹配的值保存起来, 多个匹配值可以通过数字 n 来查看(n 是一个数字,表示第 n 个捕获组的内容)。
//匹配一个数字开头多个字母结尾的组合 var str = "123abcGooleB7eijing"; var patt1 = /([1-9])([a-z]+)/g; document.write(str.match(patt1)); //3abc,7eijing
修饰符(标记)
修饰符 | 含义 | 描述 |
---|---|---|
i | ignore - 不区分大小写 | 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。 |
g | global - 全局匹配 | 查找所有的匹配项。 |
m | multi line - 多行匹配 | 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。 |
s | 特殊字符圆点 . 中包含换行符 \n | 默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。 |
var str="Runoobgoogle\ntaobao\nrunoobweibo"; var n1=str.match(/^runoob/g); // 匹配不到 var n2=str.match(/^runoob/gi); // 不区分大小写 匹配到一个 var n3=str.match(/^runoob/gmi); // 多行匹配不区分大小写 匹配到两个
var str="google\nrunoob\ntaobao"; var n1=str.match(/google./); // 没有使用 s,无法匹配\n var n2=str.match(/runoob./s); // 使用 s,匹配\n
部分元字符
\b |
匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 |
\B |
匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 |
\cx |
匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。 |
\d |
匹配一个数字字符。等价于 [0-9]。 |
\D |
匹配一个非数字字符。等价于 [^0-9]。 |
\f |
匹配一个换页符。等价于 \x0c 和 \cL。 |
\n |
匹配一个换行符。等价于 \x0a 和 \cJ。 |
\r |
匹配一个回车符。等价于 \x0d 和 \cM。 |
\s |
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S |
匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\t |
匹配一个制表符。等价于 \x09 和 \cI。 |
\v |
匹配一个垂直制表符。等价于 \x0b 和 \cK。 |
\w |
匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。 |
\W |
匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。 |
完整文档:https://www.runoob.com/regexp/regexp-syntax.html
正则表达式中的exec和match方法的区别
字符串的正则方法有:match()、replace()、search()、split()
正则对象的方法有:exec()、test()
1、match语法: str.match(regexp)
match的用法主要区分就是,正则表达式是否有全局标示g.
1)如果有g全局标志,那么返回的数组保存的是,所有匹配的内容,不包括子匹配。
2)如果没有g全局标志,那么返回的数组arr.arr[0]保存的是完整的匹配.arr[1]保存的是第一个括号里捕获的字串,依此类推arr[n]保存的是第n个括号捕获的内容.也就是当包含有全局的标志时则返回的结果第一个是正确匹配的结果,后面依次是子匹配的结果。
2、regexp语法: regexp.exec(str);
exec(g有没有都无影响)就等价于不含有g全局标志的match.即返回数组arr[0]为匹配的完整串.其余的为括号里捕获的字符串(当含有子匹配时).
正则表达式的() [] {} 的区别。
() 是为了提取匹配字符串的,表达式中有几个()就有几个相应的匹配字符串。
(\s*)表示连续空格的字符串
[] 是定义匹配的字符范围。比如[a-zA-Z0-9]表示相应位置的字符要匹配英文字符和数字。[\s*表示空格或者*号]
{}一般是用来匹配的长度。比如\s{3}表示匹配三个空格,\s[1,3]表示匹配1到3个空格
(0-9)匹配'0-9'本身。[0-9]*匹配数字(注意后面有*,可以为空)[0-9]+匹配数字(注意后面有+,不可以为空),
{0-9}写法是错误的
[0-9]{0,9}表示长度为0到9的数字字符串。
[^0-3] 表示找到这个位置上字符只能是除了0到3之外的所有字符
str.replace(/<\/?[^>]*>/gim,"");//去掉所有的html标记 str.replace(/(^\s+)|(\s+$)/g,"");//去掉前后空格 str.replace(/\s/g,"");//去除文章中间空格