JS正则总结

语法

如何定义一个正则
JS 中使用非常方便

  1. 直接量:let reg = /s$/
  2. 构造函数:let reg = new RegExp('s$');

属性:

  1. global是一个只读的布尔值,说明这个正则表达式是否带有修饰符g
  2. ignoreCase是一个只读的布尔值,说明正则表达式是否带有修饰符i
  3. multiline只读布尔值,是否带有m

用法

介绍如何构建一个正则表达式

直接量字符

支持非字母的匹配,通过反斜线进行转义

直接量字符

字符类

一个字符类可以匹配它所包含的任意字符

字符类

重复

正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的位置
重复
非贪婪的重复:只需在待匹配的字符后跟随一个问号

选择、分组、引用

选择、分组、引用
()作用:

  1. 把单独的项组合成子表达式
  2. 在完整的模式中定义子模式,可以从目标中抽出和圆括号中的子模式相匹配的部分
  3. 允许在同一正则表达式的后部引用前面的子表达式

指定匹配位置

指定匹配位置

修饰符

修饰符是放在//符号之外的

修饰符

方法

介绍支持正则的方法

字符串方法应用正则

search()

不支持全局检索,忽略正则表达式参数中的修饰符g

1
2
let str = "chj chj chj!"; 
let n = str.search(/chj/i); // n = 0

replace()

replace方法不改变原来的值

1
2
3
let str = "chj Chj chj!"; 
let reg = /chj/ig;
let new_str = str.replace(reg, 'chjssg'); // "chjssg chjssg chjssg!"

替换的可以是字符串,也可以是函数(也就是上面’chjssg’这个位置)。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。
$含义

例子:

1
2
3
let name = "Jeff, Chen";
let new_name = name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");
// Chen, Jeff
1
2
3
4
5
6
//  函数的例子
let name = 'aaa bbb ccc';
let uw = name.replace(/\b\w+\b/g, function(word){
return word.substring(0,1).toUpperCase() + word.substring(1);}
);
// "Aaa Bbb Ccc"

match()

1
2
3
4
5
6
7
8
9
// 有全局匹配字符g
let str = 'chj chj CHJ'
let reg = /chj/g;
str.match(reg) // ["chj", "chj"]

// 没有有全局匹配字符g
let str = 'chj chj CHJ'
let reg = /chj/;
str.match(reg) // ["chj", index: 0, input: "chj chj CHJ", groups: undefined]

split()

1
2
3
4
5
6
7
// eg1
let str = "姓名+性别+年龄"
let arr = str.split(/[,+]/) // ["姓名", "性别", "年龄"]

// eg2
let str = 'chjssg is a handsome boy'
let words = str.split(/\s+/) // ["chjssg", "is", "a", "handsome", "boy"]

正则对象上方法

exec()

exec() 方法用于检索字符串中的正则表达式的匹配。
该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

1
2
3
let reg = /chj/;
reg.exec("The handsome boy -chj, chj is shuaiqi ");
// ["chj", index: 18, input: "The handsome boy -chj, chj is shuaiqi ", groups: undefined]

test()

test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。

1
2
let reg = /chj/;
reg.test("The handsome boy -chj "); // true

一些正则例子

1
2
//  匹配url: http(s)://...
let reg = /(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|&|-)+)/g;