JavaScript正则表达式
来源:互联网 发布:mac os大小 编辑:程序博客网 时间:2024/06/03 12:29
模式修饰符
i 忽略大小写g 全局匹配m 多行匹配
正则表达式方法
test
alert(/Box/i.test('box')); //true 写法一var pattem = new RegExp('Box','i');var str = 'box';alert(pattern.test(str)); //true 写法二
exec
有就显示数组(只匹配第一个),没有就返回null
var pattem = /Box/i; //忽略大小写var str = 'box';alert(pattern.exec(str)); //box
test&exec
开启全局匹配时,索引位置不会重置
var pattern = /box/ig;var str = 'This is a Box!That is a box!';alert(pattern.test(str)); //truealert(pattern.lastIndex); //13alert(pattern.exec(str)); //boxalert(pattern.lastIndex); //27
String对象的正则表达式方法
match
返回子串或null
var pattern = /Box/i; //忽略大小写var str = 'This is a Box!That is a box!';alert(str.match(pattern)); //Box 匹配到第一个字符串,返回数组var pattern = /Box/ig; //全局匹配忽略大小写var str = 'This is a Box!That is a box!';alert(str.match(pattern)); //Box,box 匹配所有字符串,返回数组
search
返回第一个匹配的位置,从0开始计数,匹配不到返回-1
var pattern = /box/;var str = 'This is a Box!That is a box!';alert(str.search(pattern)); //24var pattern = /box/i; //忽略大小写var str = 'This is a Box!That is a box!';alert(str.search(pattern)); //10var pattern = /xox/;var str = 'This is a Box!That is a box!';alert(str.search(pattern)); //-1 匹配不到
replace
返回替换后的字符串
var pattern = /Box/;var str = 'This is a Box!That is a box!';alert(str.replace(pattern,'Tom')); //This is a Tom!That is a box!var pattern = /Box/ig; //全局匹配忽略大小写var str = 'This is a Box!That is a box!';alert(str.replace(pattern,'Tom')); //This is a Tom!That is a Tom!
split
返回分割后的数组,默认全局匹配,匹配不到则返回原字符串
var pattern = /!/; //匹配感叹号var str = 'This is a Box!That is a box!';alert(str.split(pattern)); //This is a Box,That is a box,alert(str.split(pattern).length); //3var pattern = / /; //匹配空格var str = 'This is a Box!That is a box!';alert(str.split(pattern)); //This,is,a,Box!That,is,a,box!alert(str.split(pattern).length); //7
RegExp对象的静态属性
早期浏览器有差别,不常用
疑问:lastMatch等,全局时,是最后一次匹配的第一个匹配项,还是最后一个匹配项?
input($_)
存储当前被匹配的字符串
var pattern = /Box/;var str = 'This is a Box!That is a box!';alert(RegExp.input); //初始为空字符串pattern.test(str); //使用一下正则alert(RegExp.input); //This is a Box!That is a box!//alert(RegExp['$_']) //其他写法,其他静态属性都有自己的短名//alert(RegExp.$_) //其他写法,只有input可以这么写
leftContext($`)
最后一次匹配时,第一个匹配到的字符串的前子串
var pattern = /box/ig; //全局匹配忽略大小写var str = 'This is a Box!That is a box!';pattern.test(str);alert(RegExp.leftContext); //This is a var pattern = /box/g; //全局匹配var str = 'This is a Box!That is a box!';pattern.test(str);alert(RegExp.leftContext); //This is a Box!That is a
rightContext($’)
最后一次匹配时,第一个匹配到的字符串的后子串
var pattern = /box/ig;var str = 'This is a Box!That is a box a box!';pattern.test(str);alert(RegExp.rightContext); //!That is a box a box!
lastMatch($&)
最后一次匹配时,第一个匹配到的字符串
var pattern = /box/ig;var str = 'This is a Box!That is a box a box!';pattern.test(str);alert(RegExp.lastMatch); //Box
lastParen($+)
最后一对圆括号内的匹配子串
multiline($*)
用于指定是否所有的表达式都用于多行的布尔值
RegExp对象的实例属性
早期浏览器有差别,不常用
global
Boolean值,表示g是否已设置
var pattern = /box/g;alert(pattern.global); //truevar pattern = /box/;alert(pattern.global); //false
ignoreCase
Boolean值,表示i是否已设置
var pattern = /box/i;alert(pattern.ignoreCase); //truevar pattern = /box/;alert(pattern.ignoreCase); //false
multiline
Boolean值,表示m是否已设置
var pattern = /box/m;alert(pattern.multiline); //truevar pattern = /box/;alert(pattern.multiline); //false
source
正则表达式的源字符串形式
var pattern = /box/g;alert(pattern.source); //box
lastIndex
整数,代表下次匹配将从哪里字符串位置开始
元字符
反斜杠后的元字符将失去其特殊含义,匹配特殊字符必须加反斜杠
元字符
. 匹配除换行符意外的任意字符[A-Z] 匹配一个大写字母[a-z] 匹配一个小写字母[0-9] 匹配一个数字[a-zA-Z0-9] 匹配一个大小写字母或数字[^0-9] 匹配一个非数字[^a-z0-9] 匹配任意一个不在括号中的字符集中的字符\d 匹配数字\D 匹配非数字,同[^0-9]\w 匹配字母和数字及_\W 匹配非(字母和数字及_)
空白字符
\0 匹配null字符\b 匹配单词边界,不匹配字符\f 匹配进制字符\n 匹配换行符\r 匹配回车字符\t 匹配制表符\s 匹配空白字符、空格、制表符、换行符\S 匹配非空白字符
重复字符
? 匹配0个或1个* 匹配0个或任意多个+ 匹配至少一个{m} 匹配m个{m,} 匹配m个,或m个以上{m,n} 匹配最少m个,最多n个
锚字符
^ 行首匹配$ 行尾匹配\A 只有匹配字符串开始处\b 匹配单词边界,词在[]内无效\B 匹配非单词边界\G 匹配当前搜索的开始位置\Z 匹配字符串结束处或行尾\z 只匹配字符串结束处
或’|’
aa|bb|cc 匹配aa或bb或cc中任意一个
分组,小括号()
(string) 括号内为一个整体例:var pattern = /8(.*)8(.*)6/;pattern.test('This is a 8google81236');alert(RegExp.$1); //google 获取模式中第一个分组对应的匹配字符串alert(RegExp.$2);//123获取模式中第二个分组对应的匹配字符串,$几表示第几个分组例:在不清楚获取的字符串是啥时对其进行加粗var pattern = /8(.*)8/;var str = 'This is a 8google8'; //var str = 'This is a 8soso8';document.write(str.replace(pattern, '<strong>$1</strong>'));例:交换位置var pattern = /(.*)\s(.*)/;var str = 'google baidu';alert(str.replace(pattern, '$2 $1'));//baidu google
贪婪和惰性
在重复字符后加?,会变成惰性匹配
var pattern = /[a-z]+/; //贪婪var str = 'abcdefg';alert(str.replace(pattern, '1')); //1var pattern = /[a-z]+?/; //惰性var str = 'abcdefg';alert(str.replace(pattern, '1')); //1bcdefgvar pattern = /8(.*)8/; //贪婪var str = '8google8 8google8 8google8';document.write(str.replace(pattern, '<strong>$1</strong>'));//<strong>google8 8google8 8google</strong>var pattern = /8(.*?)8/; //惰性var str = '8google8 8google8 8google8';document.write(str.replace(pattern, '<strong>$1</strong>'));//<strong>google</strong> 8google8 8google8var pattern = /8(.*?)8/g; //惰性,开启全局。//var pattern = /8([^8]*)8/g //另一种惰性写法var str = '8google8 8google8 8google8';document.write(str.replace(pattern, '<strong>$1</strong>'));//<strong>google</strong> <strong>google</strong> <strong>google</strong>
捕获性分组和非捕获组?:
var pattern = /([a-z]+)\s([0-9]{4}$)/; //捕获性分组,括号匹配的字符串会捕获到数组var str = 'google 2012';var a = pattern.exec(str); //返回长度3的数组alert(a[0]); //google 2012 匹配到的字符串alert(a[1]); //google 第一个分组括号的字符串alert(a[2]); //2012 第二个分组括号的字符串var pattern = /(?:[a-z]+)\s([0-9]{4}$)/; //不想捕获到数组,就在括号内最开始加?:var str = 'google 2012';alert(pattern.exec(str)); //google 2012,2012
非捕获组?=、?<=
肯定式向前查找?=、肯定式向后查找?<=(这个试不成功)
var pattern = /goo(?=gle)/; //goo后面必须跟gle//等价于var pattern = /(?=google)goo/;var str = 'google';alert(pattern.exec(str)); //goovar pattern = /goo(?=gle)/; //goo后面必须跟glevar str = 'googee'; //goo后面没有glealert(pattern.exec(str)); //null
非捕获组?!、?
var pattern = /goo(?!gee)/; //goo后面不能跟geevar str = 'google'; //goo后面是glealert(pattern.exec(str)); //goovar pattern = /goo(?!gee)/; //goo后面不能跟geevar str = 'googee'; //goo后面是geealert(pattern.exec(str)); //null
数组嵌套分组
var pattern = /(a?(b?(c?)))/;var str = 'abc';alert(pattern.exec(str)); //abc,abc,bc,c
换行模式
var pattern = /\d+/;var str = '1.baidu\n2.google\n3.bing';alert(str.replace(pattern,'#')); //#.baidu\n2.google\n3.bingvar pattern = /\d+/g; //开启全局var str = '1.baidu\n2.google\n3.bing';alert(str.replace(pattern,'#')); //#.baidu\n#.google\n#.bingvar pattern = /^\d+/g; //开启全局,限定开始位置var str = '1.baidu\n2.google\n3.bing';alert(str.replace(pattern,'#')); //#.baidu\n2.google\n3.bingvar pattern = /^\d+/gm; //开启全局,多行模式,限定开始位置var str = '1.baidu\n2.google\n3.bing';alert(str.replace(pattern,'#')); //#.baidu\n#.google\n#.bing
阅读全文
0 0
- JavaScript 正则 正则表达式
- Javascript 正则表达式javascript
- javascript正则表达式,jquery正则
- javascript正则表达式,jquery正则
- javascript正则表达式,jquery正则
- javascript正则表达式,jquery正则
- JavaScript正则表达式
- JavaScript正则表达式
- javascript中的正则表达式
- JavaScript正则表达式
- javascript正则表达式
- [JavaScript]正则表达式学习
- JavaScript中的正则表达式
- JavaScript正则表达式- -
- javascript正则表达式
- JavaScript正则表达式
- Javascript正则表达式
- javascript 正则表达式总结
- 再论由内而外造就自己
- android 反射使用
- 整型、实型、指针、bool与 0 的比较
- 关于Oracle数据库优化的几点总结
- Binder service入门—框架层、应用层调用native binder service
- JavaScript正则表达式
- 正则表达式匹配
- Software test & translating
- LinkedList
- react开发环境搭建
- ubuntu14.04上网问题
- Makefile
- Android 应用程序框架
- android sensor 框架分析---sensor数据流分析