正则表达式(JavaScript)
来源:互联网 发布:技术影响力 知乎 编辑:程序博客网 时间:2024/06/05 00:41
正则表达式能干什么?
正则表达式具有强大的文本处理能力,能够添加、删除、分离、叠加、插入和修整各类的文本和数据。
在这里推荐学习工具——正则表达式在线学习工具
正则表达式的创建
var pattern1 = /abcd/g;var pattern2 = new RegExp("s$","g");
区别在于:
1.采用字面量的写法新建的正则表达式对象在代码编译时就会生成,是平常开发中常用的方式;
2.采用构造函数生成的正则对象要在代码运行时生成。
[使用正则表达式]:
正则对象的方法是指这样使用的: RegExp对象.方法(字符串)
字符串对象的方法是这样使用:字符串.方法(RegExp对象)
元字符
匹配位置的元字符($、^、\b)
^string
表示以string开始的行 $ 匹配行的结束 string$
表示以string结束的行 \b 匹配单词的分界处 ing\b
表示以ing结尾的字符串匹配字符的元字符(.、\w、\W、\s、\S、\d、\D)
文字匹配
字符组
- 方括号[]表示可以匹配括号内的任意一个,如
[0-9]
表示匹配任意一个一位数字,其中,连字符-表示一个范围,允许出现多重范围,如[0-9a-d]
注意,当连字符不是第一个字符时才才具有表示范围,如果要在字符组中包括连字符,就必须把它放在第一个字符位置 - 反义^表示匹配字符组除外的任意字符,如
a[^b]
表示匹配a后面不是b的字符串 字符转义,转义字符为’\’,它表示取消这些自负在表达式中具有的特殊意义。
有三种情况:
1.\加元字符表示匹配元字符所使用的普通字符。
2.\加非元字符表示由具体实现方式规定其意义的元字符序列
3.\加上任意其他字符表示匹配该字符(也就是说反斜线被忽略)重复
懒惰匹配:在限定符后面添加一个字符?就表示尽可能少的重复限定符号的重复次数
a.*b是一种贪婪匹配,匹配以a开头,b结尾的最长字符串
a.*?b就是懒惰匹配,匹配以a开头,b结尾的最短字符串
如果要匹配aabab,那么前者匹配出aabab,后者匹配aab和ab,不会匹配aabab
字符的运算
- 多选结构用字符’|’表示,是或的意思,如
gr[ea]y与gr(e|a)y等价
,这里有优先匹配原则,即多选结构会优先匹配左边的表达式 - 分组用”(“和”)”来完成,在括号中的表达式会看成一个整体来处理。
- 引用当 表达式被分组之后,每一个组就被自动赋予一个组号,组号就可以代表该组的表达式,编号从左到右从1开始编号。
/['"][^'"]*['"]/
表示引号包裹的字符
/['"][^'"]*\1/
表示引号包裹的字符并要求引号匹配
注意!!!!!!
- 在字符组内部,元字符的定义规则是不一样的。例如在字符组外部,点号是元字符,但是在内部不是。相反,连字符只有在字符组内部才表示范围
- 关于多选项和字符组不能混淆。无论列出多少字符,字符组只能匹配一个字符,相反,多选项可以匹配多个字符(如[abc]与(a|b|c))。
- 取反表示所有未列出字符的简便方法。
正则表达式的其他运算
零宽度断言从字面意思可以看出零宽度也就是不占位置的意思,即匹配的是一个位置
负向零宽度断言与零宽度断言相反,能够指定或者匹配不止一个位置。
(?<!experssion)
零宽负向后发断言(又称为否定逆序环视),断言自身位置的前面不能匹配字符串experssion
举个栗子
(?=abcd)ab //表示匹配abcd中的ab\b\w+(?=ed\b) //匹配以字符串ed结尾的单词的前面部分(?<=\ban)\w+\b //匹配以字符串an开头的单词的后面部分\b\w{3}(?!\d+) //匹配长度为3的字符串,并且后面不能是数字字符串(?<!\d+)[A-Z]+ //匹配不能是数字开头的、开头只能是大写字母的字符串
注意,javascrip不支持后发断言。
修饰符
用于模式匹配的string方法
- search(),参数是一个正则表达式,返回第一个与之匹配的起始位置,如果找不到匹配的字符串,就会返回-1;
- replace(),用于执行检索与替换功能,第一个参数是正则表达式,第二个参数要进行替换的字符串。
- match(),唯一参数是正则表达式,返回的数组包括字符串中所有匹配结果,如果没有修饰符g,就不会进行全局检索,但是还是会返回一个数组,
var a = "javaScript".search(/script/i);console.log(a); //4text.replace(/javascript/gi,"JavaScript") //将文档中所有的js全部替换成为大写格式"1 plus 2 equals 3.".match(/\d+/g) //["1", "2", "3"]"1 plus 2 equals 3.".match(/\d+/) //["1", index: 0, input: "1 plus 2 equals 3"]
RegExp对象
举个栗子
var pattern = /java/g;var text = "javascript is more fun than java";var result;while((result = pattern.exec(text)) != null){ console.log("matched '" +result[0] +"' at position" + result.index + "next search begins at " + pattern.lastIndex);}//text3.html:15 matched 'java' at position0next search begins at 4//text3.html:15 matched 'java' at position28next search begins at 32
阅读全文
0 0
- 正则表达式 (javascript)
- 正则表达式(javascript)
- 正则表达式(JavaScript)
- 正则表达式(JavaScript)
- javascript(正则表达式)
- JavaScript 正则表达式(网摘)
- JavaScript正则表达式(转发)
- javascript(一)-正则表达式
- Javascript正则表达式(详解)
- javascript正则表达式(转载)
- javascript 正则表达式(1)
- javascript 正则表达式(2)
- JavaScript(10)正则表达式
- JavaScript正则表达式(上)
- javaScript正则表达式(上)
- javascript(六)正则表达式
- 正则表达式(1)---JavaScript
- JavaScript - RegExp(正则表达式)
- .net---XML
- C++并发编程框架Theron(2)——Theron的五要素
- 先进后出栈 数据结构很简单
- 润乾报表api导出word
- HDOJ 1087 Super Jumping! Jumping! Jumping! (DP)
- 正则表达式(JavaScript)
- 三大计算机视觉和机器学习库的算法汇总
- JSON文件读取
- 列表与表格的使用(新手入门基础学习)
- EffectiveC++学习笔记-条款28|29
- 【Linux学习】Linux上vi(vim)编辑器使用教程
- android 手势控制
- POJ Telephone Lines 二分+dijkstra
- android 手势检测