基础知识
正则中的独立字符,如/abc/,代表对abc的完全匹配。
var reg = /abc/
var str = 'dfasabc890'
str.match(reg) // abc
reg.test(str) // true
^ 以某个字符开头
var reg = /^abc/ //代表匹配以abc开头的字符串
[] 代表选择[]中的任意一个进行匹配,如:
var reg = /[0-1a-zA-Z][123][abc]/ // - 代表区间,必须按照ascii码从小到大的顺序去写,比如a-Z会报错,因为a的ascii是97,Z的ascii是90
var str = 'f1caslwe123'
str.match(reg) // f1c [0-1a-zA-Z]匹配出了f,[123]匹配出了1,[abc]匹配出了c
- []和独立字符一样,具有移动性,从第一个字母开始匹配,开始寻找符合正则的字符串,如果没找到则从第二个字母重新开始匹配。如果匹配到,下次匹配则跳过之前匹配过的字符串开始匹配。
// 匹配出w或x、x或y、z,连着的字符
var str = 'wxyz';
var reg = /[wx][xy][z]/
str.match(reg) // xyz
^在[]中括号里代表非的意思,在[]外面则代表以后面字符开头的意思
// 从字符串中匹配出以非数字开头,后面是数字或字母的字符
var reg = /[^0-9][0-z]/
var str = 'a9saf1'
str.match(reg) // a9,[^0-9]0-9代表数字,[]中的^代表非,连起来则为非数字的意思
| 或者的意思
// 从字符串中匹配出abc 或 bcd
"abcbcd".match(/abc|bcd/g) // [ "abc", "bcd" ]
"abcbcd".match(/abc|bcd/) // [ "abc" ] 如果没有g,使用|则只会匹配出一个
// 从字符串中匹配出abc 或 bcd,并且后面跟着数字
"abc2bcd1".match(/abc[0-9]|bcd[0-9]/g) // [ "abc2", "bcd1" ]
() 代表子表达式,其优先级更高
// 从字符串中匹配出abc 或 bcd,并且后面跟着数字
"abc2bcd1".match(/(abc|bcd)[0-9]/g) // [ "abc2", "bcd1" ]
// 如果不加括号,则代表匹配出abc或者bcd+数字
"abc2bcd1".match(/abc|bcd[0-9]/g) // [ "abc", "bcd1" ]
元字符
\w代表[0-9A-Z_]符合其中的任意一个字符,\W代表\w以外的字符
- \w === [0-9A-z_]
- \w === [^\W]
/\w\w\w/.test("a8_") // true
/\w\w\W/.test("a8*") // true
- \d === [0-9]
- \d === [^\D]
- \s === [ \r\n\t\v\f] // 第一个是空格 \r回车 \n换行 \r制表(tab) \v垂直换行 \f下一页
- \s === [^\S]
"a\tc".match(/a\sc/g) // [ "a\tc" ] 不同浏览器针对\t效果可能不同,有的是打印空白
"a c".match(/a\sc/g) // [ "a c" ] \s 包含对空格的匹配
"test a".match(/\bt/) // t
"test a".match(/\ba/) // a
"test a".match(/a\b/) // a
- .可以匹配出除了换行和回车以外的所有字符
- . === [\r]&[\n]
"ab\rc\n\t".match(/./g) // [ "a", "b", "c", "\t" ]