https://blog.csdn.net/qq_31631167/article/details/81029712
1,正则表达式实例方式
字面量
var reg=/ /
var reg=/ /gi
构造函数
var reg = new RegExp(' ','g') 修饰符: g 全局搜索 i 忽略大小写 m 多行
2.入门案例
^([ ]{2,3})+@
^开始 ()组 $1
+一个或多个
d 数字 d? 0或1
d+ 一或多 d{3} 3次
d* 0或者任意 单词边界
. 任意字符
. 表示符号.
/ 表示符号 /
元字符:
* 0 多
+ 1 多
? 0 1
$ 结尾
^ 开始
类 [ABZ] A或者B 或者Z
[A-Z] A或者B...Z [A-Za-z0-9]
‘ - ’ 在两数字之间表示范围不然就表示‘ - ’本身
[^a-z] 不是a-z的 ‘^’ 出现在[]里面表示非 否则表示开始
预定义类: . 所有字符
s 空白字符
d 数字
w 单词字符(字母 数字 下划线)
单词边界
B 非单词边界
量词
? 0 1
* 0 多
+ 1 多
{n} n次
{n,m} n到m次 包含n m (全部符合,以高的匹配)
{n,m}? 尽可能以低的匹配
{n,} 至少n次
{0,m} 至多m次
分组()
/(Byron) {3}/ 匹配Byron出现3次的
/Byr(on |ca)Sa/ 匹配出现 ByronSa 或者 ByrcaSa的
反向引用
eg: 2012-12-25 --> 12/25/2015
'2012-12-25'.replace(/(d{4})-(d{2})-(d{2})/, '$2/$3/$1')
忽略分组的概念: (?:) 在分组里的开始输入 ?:来忽略组的概念
前瞻:
正向前瞻 exp(?=assert) eg : w(?=d)
负向前瞻 exp(? ! assert) eg: w(?!d)
js从文本头向尾部解析,文本尾部叫做”前”
‘this is a apple’将is替换为A
'this is a apple'.replace(/is(?=sa)/g,'A');
//输出"this A a apple"
正则表达式的属性: global ignoreCase multiline lastIndex source(正则文本)
正则方法: RegExp.prototype.test(str) 结果返回true 或false
RegExp.prototype.exec(str) 如果未找到返回null 找到返回数组(包含 index:匹配文本的位置 input:应用正则表达式的字符串)
****全局查找时 lastIndex 表示 当前匹配结果的最后一个字符的下一个字符位置 非全局查找 lastIndex 无效
字符串对象方法: String.prototype.search(reg) 会忽略全局 找到返回第一个找到的index 找不到返回-1
String.prototype.match(reg) 不忽略全局 咋不到返回null 找到返回数组
String.prototype.split(reg)
String.prototype.replace('','') 第一个参数可以写 reg 第二个参数可以是函数
function replacer(match, p1, p2, p3, offset, string) { // p1 is nondigits, p2 digits, and p3 non-alphanumerics return [p1, p2, p3].join(' - '); } var newString = 'abc12345#$*%'.replace(/([^d]*)(d*)([^w]*)/, replacer);
match: 匹配的字符串
p1 p2 p3 组
offest: 所匹配字符串在原字符串的index
string: 调用该方法的字符串