用来处理字符串的规则javascript
使用一个正则表达式字面量,其由包含在斜杠之间的模式组成java
var re = /\d+/;
调用RegExp
对象的构造函数 ,两个参数一个是元字符字符串,一个是修饰符字符串正则表达式
var re = new RegExp("\\d+");
这两种仍是有点语法区别segmentfault
- 构造函数由于传递的是字符串,\须要写两个才表明斜杠
正则表达式由两部分构成数组
设置出现的次数ide
元字符 | 含义 |
---|---|
***** | 零到屡次 |
+ | 1到屡次(在[]中就表明+号) |
? | 零或者1次 |
{n} | 出现n次 |
{n,} | 出现n到屡次 |
{n,m} | 出现n到m次 |
单个或者组合在一块儿表明特殊含义的函数
元字符 | 含义 |
---|---|
\ | 转义字符 |
. | 除\n(换行符)之外的任意字符 |
^ | 以哪个元字符做为开始 |
$ | 以哪个元字符做为结束 |
\n | 换行符 |
\d | 0-9之间的数字 |
\D | 匹配一个非数字字符 (大写和小写的意思是相反的) |
\w | 数字,字母,下划线中的任意一个字符 |
\s | 一个空白字符(包含空格,制表符,换页符等) |
\t | 一个制表符(一个TAB键:4个空格) |
\b | 匹配一个单词的边界 |
x|y | x或者y |
[xyz] | x或者y或者z中的 |
[^xy] | 除了x/y之外的任意字符 |
[a-z] | 指定a-z这个范围的任意字符 |
[^a-z] | 除了小写a-z的字符 |
() | 正则中的分组符号 |
(?:) | 只匹配不捕获 |
(?=) | 正向预查 |
(?!) | 负向预查 |
表明普通含义ui
/zhuzhe/ 只匹配zhuzhethis
符号 | 含义 |
---|---|
i | 忽略大小写匹配 |
m | 忽略换行匹配(多行匹配) |
g | 全局匹配 |
var re= /[xy]/ re.test('xy') //true var re= /^[xy]$/ re.test('xy') //false //在[]里面+号就表示普通的+号,可是\d在[]仍是0-9 var re=/^[@+]$/ re.test('+') //true //[]中不存在多位数 var re=/^[10-29]$/ //这个并非表示10-29,表示1或者0-2或者9
经常使用的正则表达式.net
/* *一、能够出现+-号,也能够不出现 二、一位0-9均可以,多位首位不能为0 三、小数部分可能有可能没有,一旦有后面必须有小数点+数字 ? 0或者1 + >=1次 小数点要转义 */ var re=/^[+-]?(\d|([1-9]\d+))(\.\d+)?$/
/* *一、 数字,字母,下划线 二、 6-16位 \w 数字,字母,下划线中的任意一个字符 */ var re=/^\w{6,16}$/
/* * 1. 尼古拉斯.赵四 2. 名字长度2-10位,有译文 .汉字 汉字匹配 [\u4e00-\u9fa5] */ var re=/^[\u4e00-\u9fa5]{2,10}(.[\u4e00-\u9fa5]{2,10})*?$/ //这个.写错了
var reg = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/
var reg=/^\d{17}(\d|X)$/
- 正则RegExp.prototype的方法
- exec
- test
- 字符串String.prototype上支持正则表达式处理的方法
- replace
- match
- split
- search
- matchAll
**exec()**
方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null
。
index:当前捕获内容在字符串的起始索引
input;原始字符串
正则捕获的懒惰性:每执行一次只能捕获到一个符合正则规则,可是默认状况下,执行屡次获取的结果永远都是第一个匹配的,其余的永远匹配不到
当所有捕获时,再次捕获的结果是null
RegExpObject.exec(string)
实例1
lastIndex:当前正则下一次匹配的起始索引位置(正则的属性),默认是0
var str="I love antzone ,this is animate"; var reg=/an/; console.log(reg.exec(str)); /* ["an", index: 7, input: "I love antzone ,this is animate", groups: undefined] */ var str="I love antzone ,this is animate"; var reg=/an/g; var myArray; while ((myArray = reg.exec(str)) !== null) { var msg = 'Found ' + myArray[0] + '. '; msg += 'Next match starts at ' + reg.lastIndex; console.log(msg); } //Found an. Next match starts at 9 //VM349:7 Found an. Next match starts at 26
实例二:
var str="I love antzone ,this is animate"; //这里不加g,会死循环,否则每次都是从第一个开始捕获 var reg=/an/g; console.log(reg.exec(str)); //加了这句话,就能够找完所用的 an reg.lastIndex; console.log(reg.exec(str)); /* *["an", index: 7, input: "I love antzone ,this is animate", groups: undefined] ["an", index: 24, input: "I love antzone ,this is animate", groups: undefined] */
**test()**
方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true
或 false
。
var re=/an/; console.log(re.test('asada')) //fasle console.log(re.test('asanda')) //true //是否在最开始 let str = 'hello world!'; let result = /^hello/.test(str); console.log(result); // true
注意:test会改变正则表达式的lastIndex, (exec()
一样改变正则自己的 lastIndex属性值
).
match
(字符串方法) match()
方法检索返回一个字符串匹配正则表达式的的结果
一、正则表达式不包含
g
标志,str.match()
将返回与RegExp.exec()
. 相同的结果。二、用法都要加g,不加g就没意义,
三、找不到返回null,找到返回找到值的数组
语法
str.match(regexp)
实例
var re = /\d/ var str = "2018abc2019dad2020asas" console.log(str.match(re)) // ["2", index: 0, input: "2018abc2019dad2020asas", groups: undefined] var re = /\d/g var str = "2018abc2019dad2020asas" console.log(str.match(re)) // ["2", "0", "1", "8", "2", "0", "1", "9", "2", "0", "2", "0"] var re = /\d+/g var str = "2018abc2019dad2020asas" console.log(str.match(re)) // ["2018", "2019", "2020"] var re = /an/g var str = "2018abc2019dad2020asas" console.log(str.match(re)) // null
"http:/www.baidu.com/?a=1&b=2".match(/([^?&=]+)=([^?&=]*)/g); //["a=1", "b=2"]