概述
作用
模式验证(文本匹配) 文本搜索 文本替换 从文本中提取字符串
声明+使用
1. 声明:String reg = "" ;
2. 使用
String 类中函数:matches ( ) split ( ) replaceAll ( )
Pattren ( 模式对象) 和Matcher ( 匹配器) :
Pattren p = Pattren . compile ( "a*b" ) ;
Matcher m = p. matcher ( "aaaab" ) ;
boolean b = m. matches ( ) ;
1.声明
var reg = /...pattern.../[flags]
var reg = new RegExp ( "pattern" , "[flags]" )
pattern : 必选项---可以是要查找的内容
flag : 可选项
g : 全文查找
i : 忽略大小写
m : 多行查找
2.使用
String类中函数:splic ( ) 截取
加不加g效果相同
replace ( ) 替代
有g则替代所有满足正则表达式的字符串,否则只替换第一个
match ( ) 返回匹配的字符串数组
有g则返回所有满足正则表达式的字符串,否则只返回第一个
search ( ) 返回匹配的字符串的索引
RegExp:text ( ) 判断字符串是否匹配正则, 返回布尔值
exec ( ) 返回字符串中与正则相匹配的字符串
注意:1.字符串中含多个匹配的小字符串时, 第一次exec ( ) 返回第一个匹配的,第二次exec ( ) 返回第二个匹配的...
但是有g ( 全文查找) 时才会有这样的效果
2.若表达式中有捕捉用的( ) , 则返回的数组中也有可能含有( )
3.默认都是贪婪匹配, 量词加上?则不贪婪
正则表达式构造
元字符
( ) [ ] { } \ ^ $ | ? * + .
需要转义, 路径用\\连接时,以\\\\分割
特殊字符
\t \n \r \f \a \e \b \v \0
字符类: 只能匹配一个字符 [ xx]
简单类: [ abc] abc中的一个
负向类: [ ^ abc] 除了abc的一个
范围类: [ a- zA- Z ] [ a, z] 或[ A , Z ] 中的一个
组合类: [ a- zA] a到z或者A
不要有空格, 在[ ] 里面不能再嵌套[ ] , 不能写成[ a- m[ ^ b- e] ]
/ num[ 1 - 4 s] /= == num1, num2, num3, num4, nums
预定义类: [ ]
\d 数字:[ 0 - 9 ]
\D 非数字: [ ^ 0 - 9 ]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[ ^ \s]
\w 单词字符:[ a- zA- Z_0- 9 ]
\W 非单词字符:[ ^ \w]
量词: 多个
? : 0 次或1 次 注意: 量词? 表示非贪婪匹配
* : 0 次或多次
+ : 1 次或多次
{ n} : n次
{ n, m} : n- m次
{ n, } : 至少n次
字符类+ 量词:同一个字符出现的次数
捕获分组 : ( ) 分组且存储,使用$n捕获
分组后将分组的内容看成一个整体
非捕获分组 : ( ?: ) 分组但不保存,使用$n捕获不到
候选 : | |连接候选的字符串
/( aaa|bbb|ccc) /:aaa或bbb或ccc
区分 : [abc]
反向引用 : RegExp.$1
分组从左到右存储在RegExp构造函数中, 通过$n获取,正则中用\表示$
var sToMatch="#123456789" ;
var reg=/#( \d+) /;
console.log ( reg.test ( sToMatch) ) ;
console.log ( RegExp.$1) ; //输出 "123456789”
var sToChange="1234 5678" ;
var reMatch=/(\d { 4} ) (\d { 4} ) /;
var sNew=sToChange.replace ( reMatch, "$2 $1" ) ;
console.log ( sNew) ; //输出 "5678 1234”
前瞻 : 括号内的内容不代表分组
正向前瞻 : ( ?= ) 在前后一定出现
负向前瞻 : ( ?! ) 在前后一定不出现
边界 : ^: 行开头 注意在[]中才表示取反
$: 行结尾
\b : 单词边界
\B : 非单词边界