重学前端

13.RegExp类型

2019-05-31  本文已影响0人  ChangLau

创建正则表达式

字面量形式创建正则表达式
var expression = / pattern / flags
// pattern: 表示正则表达式
// flags: 表示正则表达式匹配模式
使用 RegExp 构造函数

接收两个参数,一个是匹配的字符串模式,一个是可选的匹配模式。

// 匹配第一个“bat”或“cat”,不区分大小写
var pattern1 = /[bc]at/i
// 与pattern1相同,只不过创建方式不同
var pattern2 = new RegExp("[bc]at", "i")

注意

由于 RegExp 构造函数的参数为字符串,所以某些情况下需要对字符串进行双重转义,所有元字符都必须进行双重转义。如下 🌰。

var patter1 = /\[bc\]at/
patter1.test('bcat') // false
patter1.test('[bc]at') // true

var pattern2 = new RegExp("\\[bc\\]at")
pattern2.test("[bc]at") // true
pattern2.test("bcat") // false
字面量模式 等价的字符串
/\[bc\]at/ \\[bc\\]at
/\.at/ \\.at
/name\/age/ name\\/age
/\d.\d{1,2} \\d.\\d{1,2}
/\w\\hello\\123/ \\w\\\hello\\\123

3 种匹配模式

// 匹配字符串中所有“at”
var pattern1 = /at/g
// 匹配第一个“bat”或“cat”,不区分大小写
var pattern2 = /[bc]at/i
// 匹配所有以“at”结尾的3个字符的结合,不区分大小写
var pattern3 = /.at/gi

元字符

正则表达式元字符包括

( [ { \ ^ $ | ) ? * + . ] }

元字符在正则表达式中都有一个或多个特殊用途,如果需要匹配元字符,需要对它们进行转义。

// 匹配第一个“bat”或“cat”,不区分大小写
var pattern1 = /[bc]at/i
// 匹配第一个“[bc]at”,不区分大小写
var pattern2 = /\[bc\]at/i
// 匹配所有以“at”结尾的3个字符的结合,不区分大小写
var pattern3 = /.at/gi
// 匹配所有“.at",不区分大小写
var pattern4 = /\.at/gi

RegExp 的实例属性

var pattern = /\[bc\]at/
console.log(pattern.global); // false
console.log(pattern.ignoreCase) // false
console.log(pattern.lastIndex) // 0
console.log(pattern.multiline) // false
console.log(pattern.source) // \[bc\]at

RegExp 的实例方法

exec

exec 专为捕获组而设计。返回匹配的数组信息,第一项与整个模式匹配的字符串,其他项是与模式中捕获组匹配的字符串。

var text = "mom and dad and baby"
var pattern = /mom( and dad( and baby)?)?/gi
var matches = pattern.exec(text)
console.log(matches); // ["mom and dad and baby", " and dad and baby", " and baby", index: 0, input: "mom and dad and baby", groups: undefined]

非捕获组使用

非全局模式,每次执行都返回第一个匹配项

var text = "cat, bat, sat, fat"
var pattern1 = /.at/
var matches = pattern1.exec(text)
console.log(matches); // ["cat", index: 0, input: "cat, bat, sat, fat", groups: undefined]
// 再次调用
var matches = pattern1.exec(text)
console.log(matches); // ["cat", index: 0, input: "cat, bat, sat, fat", groups: undefined]

全局模式,每次执行都返回下一个匹配项

var text = "cat, bat, sat, fat"
var pattern1 = /.at/g
var matches = pattern1.exec(text)
console.log(matches); // ["cat", index: 0, input: "cat, bat, sat, fat", groups: undefined]
// 再次调用
var matches = pattern1.exec(text)
console.log(matches); // ["bat", index: 5, input: "cat, bat, sat, fat", groups: undefined]
test

接收一个字符串参数,如果模式和该参数匹配,则返回 true,适用于只想知道字符串与某个模式是否匹配,不需要知道其内容的情况。

var text = "000-00-000"
var pattern = /\d{3}-\d{2}-\d{3}/
if(pattern.test(text)){
    // true
    console.log("The pattern was matched");
}
继承方法

toString、toLocaleString,返回正则表达式字面量

var pattern = /\d{3}-\d{2}-\d{3}/
console.log(pattern.toString()); // /\d{3}-\d{2}-\d{3}/
console.log(pattern.toLocaleString()); // /\d{3}-\d{2}-\d{3}/

var pattern = new RegExp("\\d{3}-\\d{2}-\\d{3}")
console.log(pattern.toString()); // /\d{3}-\d{2}-\d{3}/
console.log(pattern.toLocaleString()); // /\d{3}-\d{2}-\d{3}/
上一篇下一篇

猜你喜欢

热点阅读