创建正则表达式
字面量形式创建正则表达式
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 种匹配模式
- g:全局匹配,模式应用于所有字符串,而非在匹配到第一项时立即停止
- i:不区分大小写模式。
- m:多行模式。
// 匹配字符串中所有“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 的实例属性
- global,表示是否设置了 g 标志
- ignoreCase,表示是否设置了 i 标志
- lastIndex,表示开始搜索下一个匹配项的字符位置,从 0 算起
- multiline,表示是否设置了 m 标志
- source,正则表达式的字符串表示
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}/