正则表达式是按照一定的规则组成的表达式,用于匹配字符串。该表达式通常由普通字符、元字符、其他特殊字符和标记字符组成。
元字符在正则表达式中有一种或多种特殊功能:
let expression=/pattern/flags
//例:匹配数字 全局
let pattern=/[0-9]/g
双斜杠里面的pattern
表示匹配模式。双斜杠外面的flags
称为标记字符,用于控制正则表达式的行为,可有可没有。
如果要匹配元字符本身,需要加上反斜杠\
转义:
//匹配第一个数字
let pattern=/[0-9]/
//匹配第一个[0-9]
let pattern=/\[0-9\]/
let expression=new RegExp("pattern","flags")
//例:匹配数字 全局
let pattern=new RegExp("[0-9]","g")
RegExp可以基于已有的正则表达式创建,并修改它们:
const re1=/cat/g
const re2=new RegExp(re1) // "/cat/g"
const re2=new RegExp(re1,"i") // "/cat/i"
由于RegExp构造函数的参数是字符串,所以如果要匹配元字符本身,需要二次转义:
//匹配第一个数字
let pattern=/[0-9]/
//匹配第一个[0-9]
let pattern=new RegExp("\\[0-9\\]")
//匹配第一个非数字
let pattern=/^\d/
let pattern=/\D/
//匹配所有的数字
let pattern=/[0-9]/g
//1. 100-200
let pattern1=/[1][0-9][0-9]/
//2. 要么是数字、要么是小写字母、要么是大写字母。其中小写字母优先
let pattern2=/[0-9]|([a-z])|[A-Z]/
//3. 一个小写字母,有数字(没有也行)
let pattern3=/[a-z][0-9]*/
//4. 一个小写字母,小写字母后面至少有一个9
let pattern4=/[a-z][9]+/
//5. 小写字母至少出现5-10次
let pattern5=/[a-z]{5,10}/
//6. 小写字母至少出现1次以上
let pattern6=/[a-z]{1,}/
//7. 以数字开头,以小写字母结尾
let pattern7=/^[0-9][a-z]$/
//8. 非数字
let pattern8=/[^0-9]/
//9. 特殊字符
let pattern9=/[^0-9a-zA-Z]/
let pattern=/\[0-9\]/g
pattern.global //true
pattern.ignoreCase //false
pattern.lastIndex //0
pattern.source //"\[0-9\]"
pattern.flags //"g"
test()
接收一个待匹配字符串,如果该字符串与模式匹配,返回true
let text="000-00-0000"
let pattern=/\d{3}-\d{2}-\d{4}/
pattern.test(test) //true
exec()
接收一个待匹配字符串,如果该字符与模式匹配,返回一个Array实例,该实例包括两个额外属性:index
和input
;如果匹配不到,返回null。index
表示匹配到的字符串在原始字符串的索引位置;input
表示原始字符串。
如果匹配成功,分为两种情况。如果匹配模式没有捕获组()
,则返回一个元素,即匹配到的结果;否则返回多个元素:
let text="cat bat fat"
let pattern=/cat/
pattern.exec(text) //["cat", index: 0, input: "cat bat fat"]
let pattern=/cat (bat (fat))/
let pattern=/cat/
pattern.exec(text) //["cat bat fat", "bat fat", "fat", index: 0, input: "cat bat fat"]
如果设置全局标记,则每次调用都会向前搜索下一个匹配项;否则永远只返回第一个匹配项。
let text="cat bat fat"
let pattern=/.at/
let matches=pattern.exec(text)
matches.index //0
matches[0] //"cat"
pattern.lastIndex //"0"
let text="cat bat fat"
let pattern=/.at/g
let matches=pattern.exec(text)
matches.index //0
matches[0] //"cat"
pattern.lastIndex //"3"
//第二次调用
matches=pattern.exec(text)
matches.index //4
matches[0] //"bat"
pattern.lastIndex //"7"
//第三次调用
matches=pattern.exec(text)
matches.index //8
matches[0] //"fat"
pattern.lastIndex //"11"
//第四次调用
matches=pattern.exec(text) //null
RegExp构造函数本身也有属性,这些属性适用于作用域中所有的正则表达式。这些字符可以提取出exec()
和test()
执行的操作相关的信息。
let text="this has been a short summer"
//搜索后面跟着hort的字符
let pattern=/(.)hort/g
if(pattern.test(text)){
console.log(RegExp.input) //this has been a short summer
console.log(RegExp.lastMatch) //short
console.log(RegExp.leftContext) //this has been a
console.log(RegExp.rightContext) // summer
console.log(RegExp.lastParen) //s
}
简写形式大多是不合法的ECMAScript标识符,Opera不支持简写、IE不支持多行匹配
原文:https://www.cnblogs.com/sanhuamao/p/14381494.html