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 !!!

posted @ 2020-10-17 16:58  杰哥之家  阅读(123)  评论(0编辑  收藏  举报