javascript之正则表达式
先理解 转义符号 \ 去掉符号的原来意义
RegExp有两种创建方式
1.直接量
2.new RegExp
表达式
//表达式 i 忽视大小写 g 全局匹配 m 执行多行匹配 /abc/igm test 返回是否匹配 布尔值 match 返回匹配的值 数组 /[]/ []是范围 /[0-9A-Za-z]/ /[0-9A-z]/ /[^a]/ 非a /(abc|bcd)/ 匹配abc或bcd
元字符
//元字符 \w === [0-9A-z_] \W === [^\w] 非\w \d === [0-9] \D === [^\d] \s === 空白字符(\n \f \r \t \v 空格) \S === [^\s] \b === 单词边界 \B === 非单词边界 str = 'abc cde def' str.match(/\bcde/) -> cde \t 匹配 /\td/ => 能够匹配 'abc\tdef' 不能匹配 'abc def' . === [^\r\n]
量词
//量词 n+ === 至少出现1次 {1, } /\w+/ [0-9A-z_]至少出现1次 n* === {0, } n? === {0, 1} n{x} === {3} n{x, y} === {x, y} n{x, } === {x, } n$ === n为结尾 ^n === n为首位 /^abc$/ 以abc开头且以abc结尾 例子:检验首尾是否含有数字 -> /^\d|\d$/ 检验首尾都含有数字 -> /^\d[\s\S]*\d$/ 正向预查(正向断言) ?=n 匹配任何后面紧接指定字符串n的字符串 ?!n 匹配任何后面没有紧接指定字符串的字符串 str = 'abaaa' reg = /a(?=b)/g -> a后面跟b
reg = /a(?!b)/g -> a后面不跟b 默认贪婪匹配(能多则多) 非贪婪匹配(能少则少) 量词? 比如 n+? 能取一次就一次
RegExp对象方法
//RegExp对象方法 test -> reg.text(str) 检索字符串中指定的值返回true或false exec -> reg.exec(str) 检索字符串中指定的值返回找到的值,并确定其位置 /ab/g.exec('ababab') -> ['ab', index: 0, input: 'ababab'] (index就是reg.lastIndex (检索游标)) /(a)\1/g -> \1表示引用第一个子表达式(括号里面匹配的结果) \2引用第二个子表达 以此类推 比如匹配 aabb格式 -> /(\w)\1(\w)\2/
String上的RegExp方法
search -> str.search(reg) 检索与正则表达式相匹配的值 match -> str.match(reg) 检索一个或多个正则表达式的匹配 replace -> str.replace(reg, '') 替换正则表达式匹配到的值 'aabb' -> 'bbaa' str.replace('/(\w)\1(\w)\2/', '$2$2$1$1') $1指第一个字表子表达式,$2指第二个子表达式 str.replace('/(\w)\1(\w)\2/', function($, $1, $2) { 如果 要使$无意义 $$ return $2 + $2 + $1 + $1 }) splite -> str.splite(reg) 字符串匹配到的值分割成数组
看下面例子
var str = 'aaaaaabbbbbcccccccccc' //去重 变成abc var reg = /(\w)\1*/g console.log(str.replace(reg, '$1')) var str = '1000000000000' //变规范 变成 100,000,000,000,000 var reg = /(?=(\B)(\d{3})+$)/g console.log(str.replace(reg, ','))
end !!!