语法
直接量字符
- \t 制表符
- \r 回车
- \n 换行
字符类
- [...] 方括号内的任意字符
- [^...]非方括号内的任意字符
- . 除换行符和其它Unicode行终止符之外的任意字符
- \w 等同于[a-zA-Z0-9]
- \W 等同于[^a-zA-Z0-9]
- \s Unicode空白符
- \S 空白符之外的字符
- \d 等同于[0-9]
- \D [^0-9]
/[\s\d]/
任意空白符和数字
重复字符语法
- {n,m} 匹配前一项至少n次,但不能超过m次
- {n,} 匹配前一项n次或者更多次
- {n} 匹配前一项n次
- ? 相当于{0,1}
-
- 相当于{1,}
-
- 相当于{0,}
/\d{2,3}/
匹配2-3个数字
/\w{3}\d?/
匹配三个单词和一个可选的数字
/\s+java\s+/
匹配前后带至少一个空格的java
/[^(]*/
匹配任意个非(字符
默认为贪婪匹配,当在重复字符后面加上?时候为非贪婪匹配
'|' 的作用
用于分割供选择的字符串
/ab|cd|ef/
匹配 'ab' 或者 'cd' 或者 'ef'
/\d{3}|[a-z]{4}/
匹配三位数字或者四个小写字母
()的作用
将单独的项组合成子表达式,以便可以像处理一个独立的单元那样用'|', '+', '*', '?'进行处理,同样可以取得与括号中正常匹配的内容,在正则表达式中也可以通过\后面加上数字的形式重复引用,注意这里的数字是对应的子表达式左括号的位置(理解为对表达式进行分组,每组对应有下标,下标的值为当前组左括号在表达式中的位置,使用\1这样的语法表示的是其内容和前面所匹配的内容完全相同,并不是使用相同的规则匹配)
/java(script)?/
匹配'java'或者'javascript'
/(ab|cd)+|ef/
匹配ef或者ab cd的重复
/(['"])[^'"]\1/
匹配单引号或双引号括起来的内容
(?:)与()的作用大致相同,但不生成引用,所以不发通过\加下标的形式访问到,也不占用下标位置
锚
- ^ 匹配字符串的开头
- $ 匹配字符串的结尾
- \b 单词的边界
- \B 非单词的边界
修饰符
- i 用以说明不区分大小写
- g 匹配模式为全局模式,即找出所有的匹配
- m 在多行模式中执行匹配
方法
String方法
String.search()
返回第一个与之匹配的字符串的起始位置,若没匹配到就返回-1,也可以直接传入字符串匹配
"JavaScript".search(/java/i)
返回0
String.replace()
执行检索并替换,第一个参数是正则或者字符串,第二个参数为要替换成的字符串
'Javascript'.replace(/script/,'Script')
如果在被替换字符串中出现了'$'加数字,那么replace将用与指定的子表达式相匹配的文本来替换这两个字符串
text.replace(/"([^"]*)"/g,'“$1”')
降""替换成“”
String.match()
唯一的参数是一个正则表达式
如果正则表达式是全局匹配则返回所有匹配结果组成的数组
如果不是,则返回的值第一个值是匹配的字符串,后面则返回分组匹配的内容
var url = /(\w+):\/\/([\w.]+)\/(\S*)/
var text = "welcome to http://www.test.com/index.html"
var res = text.match(url);
if (res !== null) {
console.log(res[0]) //http://www.test.com/index.html
console.log(res[1]) //http
console.log(res[2]) //www.test.com
console.log(res[3]) //index.html
}
String.split()
降字符串按规则拆分成数组,可以是字符串和正则表达式
"1,2,3,4,5,6".split(',') //[1,2,3,4,5,6]
"1, 2 ,3, 4,5 ,6".split(/\s*,\s*/) // [1,2,3,4,5,6]
RegExp对象
使用方法
var zipcode = new RegExp('\\d{5}','g')
属性
- RegExp.source 只读,包含正则表达式的文本
- RegExp.global 只读,是否带有修饰符g
- RegExp.ignoreCase 只读,是否带有修饰符i
- RegExp.multiline 只读,是否带有修饰符m
- RegExp.lastIndex 可读/写,如果匹配模式带有g修饰符,这个属性存储在整个字符串下一次检索的开始位置
方法
- RegExp.exec(string)
和String.match相似,如果没有匹配上返回null,反则返回一个数组,返回规则与String.match相同
var url = new RegExp('(\\w+):\/\/([\\w.]+)\/(\\S*)')
var text = "welcome to http://www.test.com/index.html"
var res = url.exec(text);
if (res !== null) {
console.log(res[0]) //http://www.test.com/index.html
console.log(res[1]) //http
console.log(res[2]) //www.test.com
console.log(res[3]) //index.html
}
和match不同的是无论是否具有全局修饰符g,exec都只会返回一个匹配结果和本次匹配的完整信息,并将lastIndex指向紧接着匹配子串的字符位置,当第二次调用时,它会从lastIndex开始匹配,如果没有发现匹配会将lastIndex设置为0
- RegExp.test(string)
对字符串进行检测,如果包含匹配结果则返回true
var pattern = new RegExp('java','i');
console.log(pattern.test('java111')) //true
console.log(pattern.test('ja1va111')) // false
后续整理一部分常用的正则表达式,学习中进步~~~