JavaScript正则表达式
来源:互联网 发布:手机网络劫持怎么办 编辑:程序博客网 时间:2024/06/05 08:50
目标
- 了解正则语法
- 在IDE中用正则替换、查找字符串
- 在javascript程序设计中,用正则表达式处理字符串
正则表达式
什么是正则表达式
RE(regular Expression) 用单个字符串匹配一系列符合某个句法规则的字符串。(按照某种规则去匹配符合条件的字符串)
通配符
find ./ -name *.text
^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$
邮箱匹配正则表达式
http://regexper.com 图形化看正则表达式
可以在github下载项目安装到本地
\d 数字;
? 0-1次;
+ 1到多
eg:
1: \b is \b; \b 表示单词边界
2: http:(\/\/.+.jpg) \转义 .任意字符 ()分组
3: 2006/02/03 ^(\d{4})[/-](\d{1,2})[/-](\d{2})$
"dfa2001-1-12fdafa2004-02-15dfda".match(/(\d{4})[/-](\d{1,2})[/-](\d{2})/g); //["2001-1-12", "2004-02-15"]
REGEXP对象
JS内置RegExp对象 支持正则表达式
实例化 RegExp对象
1 字面量 var reg = /\bis\b/g;(这样就是实例化了RegExp对象)
2 构造函数 var reg = new RegExp(‘\bis\b’, ‘gim’);//g 全局 i 忽略大小写 m 支持换行
eg 字面量
"THIS Is a book".replace(/is/gi,'is') "THis is a book""THIS Is a book".replace(/\bis\b/gi,'is') "THIS is a book"
eg 构造函数
var reg = new RegExp('\\bis\\b', 'g');"this is a map".replace(reg, 'Is')"this Is a map"
修饰符
g:global 全文搜索,不加 搜索到第一个匹配停止
i: ignore case 忽略大小写, 默认大小写敏感
m: multiple line 多行搜索, 默认不多行搜索
元字符
正规有两种 基本字符类型组成:
1. 原义 文本 字符 abc is
2. 元字符 –> 在正则表达式中有特殊含义的非字母字符
. * + ? $ ^ | \ () [] {}
\t 水平制表符
\v垂直制表符
\n换行符
\r回车符
\0零字符
\f换页符
\cX 与X对应的控制字符(ctrl +X)
字符类
一般情况下,正则表达式一个字符对应字符串一个字符
eg: ab\t 匹配特定的一种
'adfaab '.match(/^\w+\t$/g);//["adfaab "]
eg:[abc]匹配特定的一类
'a1b2c3d4'.replace(/[abc]/g, 'x');//"x1x2x3d4"
字符类取反
使用元字符^创建 反向类/负向类 (不属于某类的内容)
eg: 表达式 [^abc] 表示 不是字符a或b或c 的内容
'a1b2c3d4'.replace(/[^abc]/g, 'x');//"axbxcxxx"
范围类
使用字符类匹配数字 [0 1 2 3 4 5 6 7 8 9]
使用字符类匹配小写字母 [a-z]
使用字符类匹配大写字母 [A-Z]
'2014-12-13'.replace(/[0-9-]/g, 'x');//"xxxxxxxxxx"'a1b2d3x4z9'.replace(/[a-z0-9]/g, 'q');//"qqqqqqqqqq"
预定义类
. 等价 [^\r\n] 除了回车和换行符之外的所有字符
\d 等价 [0-9] 数字字符
\D 等价 [^0-9] 非数字字符
\s 等价 [\t\n\XOB\f\r] 空白符
\S 等价 [^\t\n\XOB\f\r] 非空白符
\w 等价 [a-zA-Z_0-9]单词字符(字母、数字、下划线)
\W 等价 [^a-zA-Z_0-9]非单词字符
大写表示取反
'fadfa1232131fdaf27648fdfs457vfgfd9gtr'.match(/\d/g);//["1", "2", "3", "2", "1", "3", "1", "2", "7", "6", "4", "8", "4", "5", "7", "9"]'fadfa1232131fdaf27648fdfs457vfgfd9gtr'.match(/\D/g);//["f", "a", "d", "f", "a", "f", "d", "a", "f", "f", "d", "f", "s", "v", "f", "g", "f", "d", "g", "t", "r"]
边界
正则还提供了几个常用的边界匹配字符
^ 以**开始 在[^]中取反
$ 以**结束
\b 单词边界
\B 非单词边界
'@789'.replace(/^@\d/gm,'x');//"x89"'@789'.replace(/^@\d{1,3}/gm,'x');//"x"'@789'.replace(/^@\d{1,3}?/gm,'x');//"x89"
量词
? 0-1 //{n,m}n到m次
+ 1 –> 多 //{n,} 至少n次
* 0 –>多 //{n,} 至少n次
{n}n次
{n,m}n到m次
{n,} 至少n次
{0,m} 至多m次
'@789fadfdaf'.replace(/^@\d{1,}?/gm,'x');//"x89fadfdaf"'@789fadfdaf'.replace(/^@\d{1,}/gm,'x');//"xfadfdaf"
贪婪模式
\d{3,6}'12345678'.replace(/\d{3,6}/g, 'x');"x78"//会先选择6个数字的来匹配'123456789'.replace(/\d{3,6}/g, 'x');"xx"//先6个数字匹配 后3个数字匹配
非贪婪模式
在量词后加上?即可
'12345678'.replace(/\d{3,6}?/g, 'x');"xx78"'123456789'.replace(/\d{3,6}?/g, 'x');"xxx"
分组
匹配字符串long连续出现3次的场景
long{3} 这是g出现三次 (long){3} //每个分组依次$1 $2 ....
忽略分组
不希望捕获某些分组,只需要在分组内加上 ?: 就可
(?:long).(ok) // ok ==> $1
或
使用 | 可以达到或的效果
lo(ng|go)ng => 可以匹配longng logong
反向引用
"2015-12-05".replace(/^(\d{4})\[^w](\d{2})\[^w](\d{2})$/g,$2+"/"+$1+"/"+$3); (有误 在"\[" 在使用字符$时 需要转义\$ 不然正则跟种默认规则在用)"abc123def".replace(/(\d{1})(\d{1})(\d{1})/,"($1)($2)($3)")//"abc(1)(2)(3)def""2015-02-15".replace(/^(\d{4})[^\w](\d{1,2})[^\w](\d{1,2})$/g,"$2/$1/$3");
前瞻/后顾(JavaScript不支持)
正则reg对象属性
属性 默认值
global (g) 只读 false
ignoreCase (i) 只读 false
multiline (m)只读 false
lastIndex 表达式匹配内容最后一个字符下一个位置
source 正则表达式文本字符串
var reg2 = /\w/gim;console.log(reg2.source); ⇒ '\w'
正则表达式方法
RegExp.xxx(str)
RegExp.prototype.test(str);返回true, false
用于检测字符串参数中是否存在匹配正则表达式模式的字符串
var reg1 = /\w/; var reg2 = /\w/g; while (reg2.test('ab')){ console.log(reg2.lastIndex);// 1 2 }
(/w/g).test('a'); //每次实例化一个 RegExp 对象 (缺点增加内存开消)
RegExp.prototype.exec(str);
使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果
如果没有匹配文本 则返回null,否则返回一个结果数组。
-index 匹配文本第一个字符的位置。
-input 存放检索的字符串 string非全局调用(调用非全局的RegExp对象exec()时 RegExp的lastIndex属性不生效)
str.xxx(reg)
String.prototype.match(reg)
1 检索字符串,找到一个或多个与regexp匹配的文本
2 regexp 有无标志g 影响结果。有g为全局调用
非全局调用 match()只能在字符串中执行一次匹配,
没有找到返回null,
有返回一个数组 [index, input] 类似正则表达式 exce()String.prototype.search(reg,str)
字符串中查找子字符串
1 查到,返回第一个匹配结果index. 没有查到,返回-1
2 search()方法 不执行全局匹配,忽略标志g,并且 总是从字符串的开始进行检索。String.prototype.replace(reg,str)
从字符串中匹配到正则表达式规则的字符并替换成指定的字符串。
- JavaScript 正则 正则表达式
- Javascript 正则表达式javascript
- javascript正则表达式,jquery正则
- javascript正则表达式,jquery正则
- javascript正则表达式,jquery正则
- javascript正则表达式,jquery正则
- JavaScript正则表达式
- JavaScript正则表达式
- javascript中的正则表达式
- JavaScript正则表达式
- javascript正则表达式
- [JavaScript]正则表达式学习
- JavaScript中的正则表达式
- JavaScript正则表达式- -
- javascript正则表达式
- JavaScript正则表达式
- Javascript正则表达式
- javascript 正则表达式总结
- mysql隔离级别
- Android基础知识总结
- FileZilla ftp tool
- WebService的理解(一)
- JavaIO流
- JavaScript正则表达式
- hadoop之魂--mapreduce计算框架,让收集的数据产生价值
- POJ
- C++各类大数模板
- java网络编程(1)-udp编程
- ninja: build stopped: subcommand failed. make: *** [ninja_wrapper] Error 1
- [C++ 从入门到放弃-10]C++STL之bitset位集合容器
- Unity下利用 timeScale和 unscaledDeltaTime实现部分静帧
- 【C#】利用Conditional属性完成编译忽略