JavaScript权威指南学习笔记,禁止转载!
8、正则表达式
在常见的字符串检索或替换中,我们需要提供一种模式表示检索或替换的规则。
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
使用:
/\d\d\d/.test(“123”); //true
new RegExp(“Bosn”).test(“Hi,Bosn”); //true
正则基础:
. | 任何字符(除换行符以外) | /…/.test(‘1a@’) |
\d | 数字0-9 | /\d\d\d/.test(‘123’) |
\D | 非\d,即不是数字0-9的字符 | /\D\D\D/.test(‘ab!’) |
\w | 字母a-zA-Z,数字0-9,下划线 | /\w\w\w\w/.test(‘aB9_’) |
\W | 非\w | /\W\W\W/.test(‘@!#’) |
\s | 空格符、Tab、换页符、换行符 | /\sabc/.test(‘ abc’) |
\S | 非\s |
|
\t\r\n\v\f | Tab、回车、换行、垂直制表符、换页符 |
|
[] | 字符范围 | [a-z] [0-9] [A-Za-z0-9] |
[^ ] | 字符范围以外 | [^a-z] |
^ | 行首 | ^Hi |
$ | 行尾 | test$ |
\b | 零宽单词边界 | \bno匹配‘a_no’ |
\B | 非\b |
|
转义符\ | 匹配 . ^ $ 这些字符前加上特殊转义符 \ | /\^abc/.test(‘^abc’) |
() | 分组 |
|
\n | 表示使用分组符()匹配到的字符串 | /(abc)\1/.test(‘abcabc’) |
(?:) | 仅分组 | /(?:abc)(def)\1/.test(‘abcdefdef’) |
x*,x+ | 重复0或多次,重复1或多次(贪婪算法) | abc*匹配ab,abc,abccc abc+匹配abc,abccc |
x*?,x+? | x+?:匹配x自身 非贪婪算法 | abc*?在字符串abcccc中匹配ab abc+?在字符串abcccc中匹配abc |
x? | 重复0或1次 |
|
x|y | x或y | x|y匹配x也匹配y |
x{n} x{n,} x{n,m} | 重复n次 重复>=n次 n=<重复次数<=m | x{5}匹配xxxxo x{1,3}匹配x,xx,xxx |
三个flag
global(正常匹配到一个就结束了,若需匹配到所有的情况则用global标签),
ignoreCase(不区分大小写)
multiline(可以跨行检索)
如何设置标签:
/abc/gim.test(‘ABC’); //true
RegExp(“abc”,“mgi”) .test(‘ABC’); //true
RegExp对象属性:global、ingoreCase、multiline、source
/abc/g.global //true
/abc/g.ignoreCase //false
/abc/g.multiline //false
/abc/g.source //“abc”正则的内容
RegExp对象方法:compile、exec、test、toString
/abc/.exec(“abcdef”); //“abc”返回用正则去匹配字符串匹配的结果
/abc/.test(“abcdef”); //true
/abc/.toSTring(); // “/abc/”返回正则的内容
var reg=/abc/; reg.compile(“def”);reg.test(“def”); //true改写正则的内容
string类型与正则相关的方法
String.prototype.search 返回正则在字符串中的索引
“abcabcdef” .search(/abc\1/); //0(索引为0)
String.prototype.replace 替换字符
“aabbbbcc”.replace(/b+?/,“1”); // aa1bbbcc
String.prototype.match返回一个数组,数组元素是正则的内容
“aabbbbcc”.match(/b+/); //[“bbbb”]
“aabbbbccbbaa”.match(/b+/g); //[“bbbb”,“bb”]
String.prototype.split分割字符串,返回一个数组
“aabbbbccbbaa”.split(/b+/); //[“aa”,“cc”,“aa”]
应用
//校验密码:只能输入6-20个字母、数字、下划线
/^(\w){6,20}$/
学会正则会大大提高编程效率!!!