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 === 空白字符(
 f 
 	 v 空格)   S === [^s]
 === 单词边界  B === 非单词边界   str = 'abc cde def'   str.match(/cde/) -> cde
	 匹配 /	d/ => 能够匹配 'abc	def'     不能匹配 'abc    def' 
. === [^
]

量词

//量词
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[sS]*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 !!!

原文地址:https://www.cnblogs.com/lyjfight/p/13831772.html