javascript正则表达式
来源:互联网 发布:查看数据库的存储过程 编辑:程序博客网 时间:2024/06/18 18:17
定义一个正则表达式
可以用字面量
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
字符类
连字符-
,[1-31]
表示1至3,而不是到31
字符类的连字符必须在头尾两个字符中间,才有特殊含义,否则就是字面含义。比如,[-9]就表示匹配连字符和9,而不是匹配0到9。
重复
非贪婪重复
在上面的重复字符后加上?
就是非贪婪重复。
如/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]
匹配的是退格
关于(?=p)
和(?!p)
var m = "abc".match(/b(?=c)/);m; // "b"var m = "abd".match(/b(?!c)/);m; // ["b"]
修饰符
关于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 // truer.global // truer.multiline // true
lastIndex:返回下一次开始搜索的位置。该属性可读写,但是只在设置了g修饰符时有意义。
source:返回正则表达式的字符串形式(不包括反斜杠),该属性只读。
var r = /abc/igm;r.lastIndex // 0r.source // "abc"
test()
正则对象的test方法返回一个布尔值,表示当前模式是否能匹配参数字符串。
/cat/.test('cats and dogs') // true
如果正则表达式带有g修饰符,则每一次test方法都从上一次结束的位置开始向后匹配。
r.lastIndex // 0r.test(s) // truer.lastIndex // 2r.test(s) // truer.lastIndex // 4r.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 // 1arr.input // "_abbba_aba_"
如果正则表达式加上g修饰符,则可以使用多次exec方法,下一次搜索的位置从上一次匹配成功结束的位置开始。
var r = /a(b+)a/g;var a1 = r.exec("_abbba_aba_");a1 // ["abbba", "bbb"]a1.index // 1r.lastIndex // 6var a2 = r.exec("_abbba_aba_");a2 // ["aba", "b"]a2.index // 7r.lastIndex // 10var a3 = r.exec("_abbba_aba_");a3 // nulla3.index // TypeError: Cannot read property 'index' of nullr.lastIndex // 0var a4 = r.exec("_abbba_aba_");a4 // ["abbba", "bbb"]a4.index // 1r.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
- javascript正则表达式,jquery正则
- javascript正则表达式,jquery正则
- javascript正则表达式,jquery正则
- javascript正则表达式,jquery正则
- JavaScript正则表达式
- JavaScript正则表达式
- javascript中的正则表达式
- JavaScript正则表达式
- javascript正则表达式
- [JavaScript]正则表达式学习
- JavaScript中的正则表达式
- JavaScript正则表达式- -
- javascript正则表达式
- JavaScript正则表达式
- Javascript正则表达式
- javascript 正则表达式总结
- Hdu oj 1058 Humble Numbers
- 黑马程序员----GUI(图形用户界面)
- 区分linux 物理cpu,逻辑cpu,核数
- strcpy 会copy '\0'
- Linux命令行中创建的软连接(ln -s)的无法移动问题,以及绝对路径和相对路径的概念
- javascript正则表达式
- 例题2.9 最大公约数之和 UVa11426
- HTML
- 无锁编程:lock-free原理
- 黑马程序员----绘图技术和事件监听技术
- 【HDOJ 3729】 I'm Telling the Truth (二分图最大匹配)
- POJ3662--Telephone Lines
- Gym 100733J Summer Wars 题解:灵活运用扫描线的思想
- Ubuntu14.04下安装MediaWiki小记