JavaScript正则爬坑

语法

直接量字符

  • \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]/ 任意空白符和数字javascript

重复字符语法

  • {n,m} 匹配前一项至少n次,但不能超过m次
  • {n,} 匹配前一项n次或者更屡次
  • {n} 匹配前一项n次
  • ? 至关于{0,1}
    • 至关于{1,}
    • 至关于{0,}

/\d{2,3}/ 匹配2-3个数字
/\w{3}\d?/ 匹配三个单词和一个可选的数字
/\s+java\s+/ 匹配先后带至少一个空格的java
/[^(]*/ 匹配任意个非(字符
默认为贪婪匹配,当在重复字符后面加上?时候为非贪婪匹配html

'|' 的做用

用于分割供选择的字符串
/ab|cd|ef/ 匹配 'ab' 或者 'cd' 或者 'ef'
/\d{3}|[a-z]{4}/ 匹配三位数字或者四个小写字母java

()的做用

将单独的项组合成子表达式,以即可以像处理一个独立的单元那样用'|', '+', '*', '?'进行处理,一样能够取得与括号中正常匹配的内容,在正则表达式中也能够经过\后面加上数字的形式重复引用,注意这里的数字是对应的子表达式左括号的位置(理解为对表达式进行分组,每组对应有下标,下标的值为当前组左括号在表达式中的位置,使用\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”')降""替换成“”bash

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()

降字符串按规则拆分红数组,能够是字符串和正则表达式url

"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')spa

属性

  • RegExp.source 只读,包含正则表达式的文本
  • RegExp.global 只读,是否带有修饰符g
  • RegExp.ignoreCase 只读,是否带有修饰符i
  • RegExp.multiline 只读,是否带有修饰符m
  • RegExp.lastIndex 可读/写,若是匹配模式带有g修饰符,这个属性存储在整个字符串下一次检索的开始位置

方法

  • RegExp.exec(string)

和String.match类似,若是没有匹配上返回null,反则返回一个数组,返回规则与String.match相同code

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
复制代码

后续整理一部分经常使用的正则表达式,学习中进步~~~

相关文章
相关标签/搜索