正则是一种规则, 这个规则可以用来查找字符串获取替换字符串

参考菜鸟教程

在JavaScript中可以使用正则方法不是很多, 在RegExp对象中有两个, 在String对象中有四个, 笔记针对关于正则方法的使用做记录,语法部分直接参考菜鸟教程

RegExp对象的初始化有两种方法:

  • 使用字面量的方法 例: /\d{2}/ (表示匹配两位数字)
  • 使用构造函数的方法 例: new RegExp(“\d{2}”) (标识匹配两位数组,注意构造函数传入的参数是字符串)

RegExp对象上使用匹配字符串的方法

text : 检索字符串中指定的值。返回 true 或 false。

1
2
3
var reg = /\d{2}/
var str = '20'
reg.test(str) // true

exec : 检索字符串中指定的值。返回找到的值,并确定其位置。未匹配到否则返回 null。

1
2
3
4
5
6
7
// 非全局模式
var str="Hello world Hello!";
//查找"Hello"
var patt=/Hello/;
console.log('非全局',patt.exec(str)) // index : 0
console.log('非全局',patt.exec(str)) // index : 0
console.log('非全局',patt.exec(str)) // index : 0
1
2
3
4
5
6
7
8
9
// 全局模式
var str="Hello world Hello!";
//查找"Hello"
var patt=/Hello/g;
// 在全局模式下没执行一次exec便查找一次 知道查找不到返回null 出现的值的下标会保存在RegExp对象中 (此处有坑)
console.log('1',patt.exec(str)) // index : 0
console.log('1',patt.exec(str)) // index : 12
console.log('1',patt.exec(str)) // null 未匹配
console.log('1',patt.exec(str)) // index :0

String对象上使用匹配字符串的方法

search : 检索与正则表达式相匹配的值。匹配到返回在字符串的下边,没有返回-1 跟indexOf方法类似, 但是indexOf方法不支持正则

1
2
3
4
var str="Hello world Hello!";
//查找"Hello"
var patt=/Hello/;
str.search(patt) // 0

match : 找到一个或多个正则表达式的匹配。

1
2
3
// 非全局模式
var str="The rain in SPAIN stays mainly in the plain";
console.log(str.match(/ai(n)/)) // ["ain", "n"] ()表示分组 这很有用
1
2
3
// 全局模式 不支持分组匹配
var str="The rain in SPAIN stays mainly in the plain";
console.log(str.match(/ain/g)) // ["ain", "ain", "ain"]

replace : 文本替换 也可以使用分组, $1表示第一个分组匹配结果 $2表示第二个分组结果 MDN

1
2
3
4
// 未使用分组
var str="Visit Microsoft! Visit Microsoft!";
var n=str.replace(/Microsoft/g,"Runoob");
// Visit Runoob!Visit Runoob!
1
2
3
// 使用分组
var str = '10-12-2018'
str.replace(/(\d{2})-(\d{2})-(\d{4})/,'$3年$2月$1日') // "2018年12月10日"
1
2
3
4
5
6
7
// 在自定义替换
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);
console.log(newString); // abc - 12345 - #$*%

split : 字符串切割是支持正则表达式的 MDN

1
2
str = '10-15-15-54|46'
str.split(/[-|]/) // ["10", "15", "15", "54", "46"]