javascript正則表達式
定义一个正則表達式
能够用字面量
var regex = /xyz/;
var regex = /xyz/i;
也能够用构造函数
var regex = new RegExp('xyz');
var regex = new RegExp('xyz', "i"); // 第二个參数表示修饰符
正則表達式组成
直接量字符
直接量字符如\a
特殊含义的字符须要转义
假设使用RegExp方法生成正则对象,转义须要使用两个斜杠。由于字符串内部会先转义一次。
(new RegExp("1\+1")).test("1+1") // false
(new RegExp("1\\+1")).test("1+1") // true
字符类
| 字符 | 匹配 |
|---|---|
| […] | 方括号内的随意字符 |
| [^…] | 不在方括号内的随意字符 |
| - | 连字符 |
| . | 除了换行符和行结束符 |
| \w | 不论什么ASCII字符组成的单词=[a-zA-Z0-9] |
| \W | =[^a-zA-Z0-9] |
| \s | 空白字符 |
| \S | 非空白字符 |
| \d | ASCII数字=[0-9] |
| \D | [^0-9] |
连字符-。[1-31]表示1至3。而不是到31
字符类的连字符必须在头尾两个字符中间,才有特殊含义。否则就是字面含义。比方。[-9]就表示匹配连字符和9,而不是匹配0到9。
反复
| 字符 | 描写叙述 |
|---|---|
| {n,m} | |
| {n,} | |
| {n} | |
| ? | 0次或1次 |
| + | 在于等于1次 |
| * | 在于等于0次 |
非贪婪反复
在上面的反复字符后加上?就是非贪婪反复。
如/a+/匹配字符串aaa时,会匹配aaa。而/a+?/会匹配a。
正則表達式的模式匹配总是会寻找字符串中第一个可能匹配的位置。如/a+b/匹配aaab时,会匹配aaab。/a+?
b/也会匹配’aaab’,都是从aaab中的第一个a開始匹配。所以,非贪婪模式并不表示最短匹配。
选择、分组和引用
选择
|
匹配ab或cd或ef
/ab|cd|ef/
分组
()
var m = "abcabc".match(/(.)b(.)/);
m; // ["abc", "a", "c"]
非捕获组
(?:x)称为非捕获组(Non-capturing group)。表示不返回该组匹配的内容。即匹配的结果中不计入这个括号。
var m = "abc".match(/(?
:.)b(.)/);
m[1]; // "c"
引用
\n
从1開始
不能在字符类中使用引用
指定匹配位置
| 字符 | 描写叙述 |
|---|---|
| ^ | |
| $ | |
| \b | 匹配单词边界 |
| \B | 匹配非单词边界 |
| (?=p) | x(?=y)称为先行断言(Positive look-ahead),x仅仅有在y前面才匹配。y不会被计入返回结果。 |
| (?
!p) |
x(?!y)称为后行断言(Negative look-ahead),x仅仅有不在y前面才匹配。y不会被计入返回结果。 |
[\b]匹配的是退格
关于(?=p)和(?!p)
var m = "abc".match(/b(?
=c)/);
m; // "b"
var m = "abd".match(/b(?
!c)/);
m; // ["b"]
修饰符
| 字符 | 描写叙述 |
|---|---|
| i | 不区分大写和小写 |
| g | 默认情况下,第一次匹配成功后。正则对象就停止向下匹配了。g修饰符表示全局匹配(global),加上它以后,正则对象将匹配全部符合条件的结果,主要用于搜索和替换。 |
| m | 字符串的头部或尾部可能会有换行符。
默认情况下,正则对象会将换行符算入字符串的开头或结尾。 m修饰符表示多行模式(multiline),加上它以后。正则对象会忽略字符串头部或尾部的换行符,即^和$会忽略换行符。 |
关于m
/world$/.test("hello world\n") // false
/world$/m.test("hello world\n") // true
上面的代码中。字符串结尾处有一个换行符。假设不加m修饰符,匹配不成功,由于字符串的结尾不是world;加上以后,换行符被省略,匹配成功。
属性和方法
ignoreCase:返回一个布尔值,表示是否设置了i修饰符,该属性仅仅读。
global:返回一个布尔值。表示是否设置了g修饰符,该属性仅仅读。
multiline:返回一个布尔值。表示是否设置了m修饰符,该属性仅仅读。
var r = /abc/igm;
r.ignoreCase // true
r.global // true
r.multiline // true
lastIndex:返回下一次開始搜索的位置。该属性可读写。可是仅仅在设置了g修饰符时有意义。
source:返回正則表達式的字符串形式(不包括反斜杠),该属性仅仅读。
var r = /abc/igm;
r.lastIndex // 0
r.source // "abc"
test()
正则对象的test方法返回一个布尔值。表示当前模式能否匹配參数字符串。
/cat/.test('cats and dogs') // true
假设正則表達式带有g修饰符,则每一次test方法都从上一次结束的位置開始向后匹配。
r.lastIndex // 0
r.test(s) // true
r.lastIndex // 2
r.test(s) // true
r.lastIndex // 4
r.test(s) // false
带有g修饰符时,能够通过正则对象的lastIndex属性指定開始搜索的位置
var r = /x/g;
var s = '_x_x';
r.lastIndex = 4;
r.test(s) // false
exec()
正则对象的exec方法,能够返回匹配结果。假设发现匹配。就返回一个数组,每一个匹配成功的子字符串,就是数组成员,否则返回null。
var s = '_x_x';
var r1 = /x/;
var r2 = /y/;
r1.exec(s) // ["x"]
r2.exec(s) // null
假设正则表示式包括圆括号(即要求“组匹配”),则返回的数组会包括多个元素。
当中,第一个元素是整个匹配成功的结果,后面的元素就是圆括号相应的匹配成功的组。
也就是说。第二个元素相应第一个括号,第三个元素相应第二个括号,以此类推。
exec方法的返回数组还包括下面两个属性:
input:整个原字符串。
index:整个模式匹配成功的開始位置(从0開始)。
var r = /a(b+)a/;
var arr = regex.exec("_abbba_aba_");
arr // ["abbba", "bbb"]
arr.index // 1
arr.input // "_abbba_aba_"
假设正則表達式加上g修饰符,则能够使用多次exec方法,下一次搜索的位置从上一次匹配成功结束的位置開始。
var r = /a(b+)a/g;
var a1 = r.exec("_abbba_aba_");
a1 // ["abbba", "bbb"]
a1.index // 1
r.lastIndex // 6
var a2 = r.exec("_abbba_aba_");
a2 // ["aba", "b"]
a2.index // 7
r.lastIndex // 10
var a3 = r.exec("_abbba_aba_");
a3 // null
a3.index // TypeError: Cannot read property 'index' of null
r.lastIndex // 0
var a4 = r.exec("_abbba_aba_");
a4 // ["abbba", "bbb"]
a4.index // 1
r.lastIndex // 6
字符串中与正則表達式相关的4个函数
match
match方法与正则对象的exec方法很相似:匹配成功返回一个数组,匹配失败返回null。
假设正則表達式带有g修饰符,则该方法与正则对象的exec方法行为不同。会一次性返回全部匹配成功的结果。
var s = "abba";
var r = /a/g;
s.match(r) // ["a", "a"]
r.exec(s) // ["a"]
设置正則表達式的lastIndex属性,对match方法无效。匹配总是从字符串的第一个字符開始。
search
字符串对象的search方法。返回第一个满足条件的匹配结果在整个字符串中的位置。假设没有不论什么匹配,则返回-1。
该方法会忽略g修饰符。
设置正則表達式的lastIndex属性,对match方法无效,匹配总是从字符串的第一个字符開始。
replace
它接受两个參数,第一个是搜索模式,第二个是替换的内容。
搜索模式假设不加g修饰符。就替换第一个匹配成功的值。否则替换全部匹配成功的值。
replace方法的第二个參数能够使用美元符号$,用来指代所替换的内容。
$ & 指代匹配的子字符串。
$` 指代匹配结果前面的文本。
$’ 指代匹配结果后面的文本。
$n 指代匹配成功的第n组内容。n是从1的自然数。
"hello world".replace(/(\w+)\s(\w+)/,"$2 $1")
// "world hello"
"abc".replace("b", "[$`-$&-$']")
// "a[a-b-c]c"
replace方法的第二个參数还能够是一个函数,将匹配内容替换为函数返回值。
作为replace方法第二个參数的替换函数,能够接受多个參数。它的第一个參数是捕捉到的内容,第二个參数是捕捉到的组匹配(有多少个组匹配,就有多少个相应的參数)。
此外。最后还能够加入两个參数,倒数第二个參数是捕捉到的内容在整个字符串中的位置(比方从第五个位置開始)。最后一个參数是原字符串。
split
字符串对象的split方法依照正则规则切割字符串,返回一个由切割后的各个部分组成的数组。
该方法接受两个參数。第一个參数是分隔规则。第二个參数是返回数组的最大成员数。
'a, b,c, d'.split(',')
// [ 'a', ' b', 'c', ' d' ]
'a, b,c, d'.split(/, */)
// [ 'a', 'b', 'c', 'd' ]
'a, b,c, d'.split(/, */, 2)
[ 'a', 'b' ]
空格能够直接用/, */
javascript正則表達式的更多相关文章
- javascript 正則表達式补充
定义 JavaScript种正則表達式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...
- JavaScript正則表達式知识汇总
Js 正則表達式知识汇总 正則表達式: 1.什么是RegExp?RegExp是正則表達式的缩写.RegExp 对象用于规定在文本中检索的内容. 2.定义RegExp:var +变量名=new RegE ...
- javascript正則表達式 "\b"问题
preface 昨晚在看<javascript权威指南>后.看见作者自己封装一个兼容全部浏览器的山寨HTML5新API classLIst类.自己想了想认为自己也要去玩一下.可是能力还是有 ...
- DOM笔记(十):JavaScript正則表達式
一.RegExp ECMAScript通过RegExp类型类支持正則表達式,语法和Perl类似: var exp = /pattern/flags; patternb部分是不论什么简单的或复杂的正則表 ...
- JavaScript 正則表達式
一.简单介绍 1.什么是正則表達式 正則表達式本身就是一种语言,这在其他语言是通用的. 正則表達式(regular expression)描写叙述了一种字符串匹配的模式,能够用来检查一个串是否含有某种 ...
- 经常使用的正則表達式归纳—JavaScript正則表達式
来源:http://www.ido321.com/856.html 1.正则优先级 首先看一下正則表達式的优先级,下表从最高优先级到最低优先级列出各种正則表達式操作符的优先权顺序: 2.经常使用的正則 ...
- javascript——正則表達式
正則表達式(RegExp对象):主要用于表单验证 1.创建正則表達式: (1).var ret = /pattern/; pattern是内容.能够是正則表達式的内容,能够是字符或是其它的内容 (2) ...
- JavaScript使用正則表達式
2.0 简单介绍 正則表達式是能够用来查找与给定模式匹配的文本的搜索模式.比如,在上一章中,我们在一个较长的字符串中查找子字符串Cookbook: var testValue = "This ...
- js正則表達式语法
1. 正則表達式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之同样的 ...
随机推荐
- 【转】基于linux下的变量声明declare的用法
转自:http://techcurtman.iteye.com/blog/1249512 declare 功能介绍:声明变量的属性,如果使用declare,后面没有任何参数,那么bash就会主动将所有 ...
- Android开发初体验
本文通过开发一个应用来学习Android基本概念及构成应用的UI组件. 开发的应用名叫GeoQuiz,它能给出一道道地理知识问题.用户点击true或false按钮回答问题,应用即时做出反馈 第一步请先 ...
- cordova插件分类
1.android自动更新功能所需插件 cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.gi ...
- tbType和TypeList操作
tbType查询数据库后 获得一个DataTable的数据表 数据表是写在内存里面的 可以在这个项目的其他地方去访问它,由于在内存里面 所以访问速度很快 用代码获取它的哪一行的数据供使用 例如 tbB ...
- Windows系统设置与北京Internet时间同步
找到提供Ntp服务器的网址:http://support.ntp.org/我从中找到东北大学的: ntp.neu.edu.cn ( 202.118.1.46 ) 长话短说,下面开始设置: 修改后的值 ...
- PAT_A1114#Family Property
Source: PAT A1114 Family Property (25 分) Description: This time, you are supposed to help us collect ...
- js 弹出div窗口 可移动 可关闭
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- NOIp知识点复习——最短路计数
$Mingqi\_H$ NOIp 2017考挂了...gg 重新开始好了. 计划明年2月24号前复习完所有的NOIp知识点(毕竟很不熟练啊),之后到七月底前学习完省选的东西(flag?). 从现在开始 ...
- Linux常用解压缩命令
压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 查 询:tar -jtv -f filename.tar.bz2 解压缩:tar -jxv -f filen ...
- discourse论坛迁移
在源设备的操作备份数据文件tar -czvf discoursefile716.tar.gz /var/discourse然后把此discoursefile716.tar.gz文件传到需要迁移的设备上 ...