javascript中的正则表达式
javascript正则表达式的定义
- JavaScript中的正则表达式定义在一个RegExp对象中,通过实例化一个RegExp构造函数来创建一个正则表达式对象
var pattern=new RegExp('s$');//该表达式可以匹配所以以字符‘s’结尾的字符串
- 通常我们在使用的过程中,也可以使用一对'/'包裹的表达式来定义一个正则表达式对象
var pattern=/s$/; //该表达式同样匹配所有已字符‘s’结尾的字符串
- 需要注意的是,在ECMAScript3规范中规定,同一个正则表达式所返回的都是同一个对象,但是在ECMAScript5中同一个正则表达式每次运算返回的都是新的对象。
function getRe(){ var re=/[a-z]/; re.foo='bar'; return re; } var reg=getRe(); var re2=getRe(); console.log(reg==re2);//在ECMAScript3的版本中返回的是ture,但是在ECMAScript5中返回的是false; reg.foo='baz'; console.log(re2.foo);//在ECMAScript3版本中返回‘baz’,但是在ECMAScript5中返回的死bar;
javascript正则表达式的参数
在javascript正则表达式的构造函数RegExp()中接受两个参数,第一个参数为匹配的正则表达式(可以以字符串的形式传入,但是相应字符需要用‘\’转义),第二个参数则为正则表达式的修饰符('i','g','m')
正则表达式修饰符 | 修饰符含义 |
---|---|
i | 执行不区分大小写的匹配 |
g | 执行全局匹配,匹配字符串中所有符合表达式规则的子串 |
m | 多行匹配,^匹配一行的开头和字符串的开头,$匹配一行的结束和字符串的结束 |
javascript string对象使用正则匹配的方法
- search()方法
括号参数为一个正则表达式(如果参数不是正则表达式,则会自动通过RegExp构造函数转换成正则表达式),返回匹配第一个匹配子串的起始位置(字符串首尾从0开始),如果未匹配到相应字符则返回-1,search方法忽略正则表达式中的g参数,所以不支持全局检索。
var str='123javascript正则表达式的方法'; console.log(str.search(/java/));//返回结果为3;
- replace()方法
括号中的第一参数为匹配正则表达式,第二个参数为将要替换的字符串,返回替换后的新的字符串。
var str='javascript正则表达式的方法' console.log(str.replace(/javascript/,'js'));//返回结果为'js正则表达式的方法'
- match()方法
括号中的唯一参数是正则需要匹配的正则表达式,(如果参数不会正则表达式,则会自动通过RegExp构造函数转换成正则表达式),返回一个由匹配结果组成的数组。如果参数中的正则表达式设置的g参数,则返回的数组包含所有匹配的结果。
如果参数中的正则表达式没有设置g参数,则返回的数组中,第一个元素为第一次匹配到的元素的完整结果,后面依次为正则表达式用圆括号括起来的子表达式,以及所匹配的一个元素所在位置的索引和全文文本。var str='1 plus 2 equals 3'; console.log(str.match(/\d+/g));//返回结果是["1", "2", "3"];
var url=/(\w+):\/\/([\w.]+)\/(\S*)/; var str='this is my blog website http://lilunze.github.io/index.html'; var result=str.match(url); console.log(result); 返回的结果为: ["http://lilunze.github.io/index.html", //第一个完整匹配的结果 "http", //第一个圆括号内表达式匹配的结果 "lilunze.github.io", //第二个圆括号内表达式匹配的结果 "index.html", //第三个圆括号表达式匹配的结果 index: 24, //第一个完整匹配结果所在文本的索引 input: "this is my blog website http://lilunze.github.io/index.html"]//全文的文本内容
- split()方法
传入一个分隔符,将调用该方法的字符串按照指定的分割符分割,并返回一个包含了所有分割后的字符串所组成的数组
var str='123,456,789,4343434'; console.log(str.split(','));//返回的结果为["123", "456", "789", "4343434"];
javascript正则表达式的属性
在每个正则表达式的构造函数实例化对象中都包含有四个属性('global','ignoreCase','multiline','lastIndex')
正则表达式的属性 | 属性的含义 |
---|---|
global | 返回一个布尔值,表示该正则表达式是否含有g参数 |
ignoreCase | 返回一个布尔值,表示该正则表达式是否含有i参数 |
multiline | 返回一个布尔值,表示该正则表达式是否含有m参数 |
lastIndex | 一个可读写的整数,如果匹配模式带有g参数,该属性存储整个字符串中下次检索的开始位置 |
source | 返回正则表达式的源文本 |
javascript正则表达式的方法
- exec()方法 exec()方法与match()方法在未执行全局检索的方法类似,同一个正则表达式可以重复执行exec()方法,如果是全局检索,那么每次在执行exec()方法的时候在RegExp的lastIndex属性中会存储紧挨着匹配字符串的索引,下次在执行exec()方法的时候回从索引位置开始检索 ``` var url=/(\w+)://([\w.]+)/(\S*)/g; var str='this is my blog website http://lilunze.github.io/index.html ,and http://lilunze.github.io/index.html is a good website'; var result=url.exec(str); console.log(result); console.log(url.lastIndex); var result2=url.exec(str); console.log(result2);
运行结果为
[ "http://lilunze.github.io/index.html", "http", "lilunze.github.io", "index.html", index: 24, input: "this is my blog website http://lilunze.github.io/i…://lilunze.github.io/index.html is a good website" ]
59
[ "http://lilunze.github.io/index.html", "http", "lilunze.github.io", "index.html", index: 65, input: "this is my blog website http://lilunze.github.io/i…://lilunze.github.io/index.html is a good website" ]
100
- **test()方法**
test()方法的运行原理与exec()方法一致,接受一个字符串参数,匹配该字符串中是否有符合正则表达式规则的子串,返回一个布尔值,与exec()的null结果对应的就是false;
var url=/(\w+)://([\w.]+)/(\S*)/g; var str='this is my blog website http://lilunze.github.io/index.html ,and http://lilunze.github.io/index.html is a good website'; var result=url.test(str); console.log(result);//返回结果是true;
#### javascript正则表达式的常用语法
- 常用字符量
|常用字符量|含义|
|:--------:|:--------:|
|[...]|匹配方括号内的所有字符|
|[^...]|匹配不在方括号内的任意字符|
| \ | 转义字符|
| ^ |匹配字符串开始的位置,如果设置了m属性,也匹配 \r 和 \n 之后的位置|
| $ |匹配字符串结束的位置,如果设置了m属性,也匹配 \r 和 \n 之前的位置|
| * |匹配前面的子表达式0次或多次,例如 /o*/能够匹配h|
| + |匹配前面的子表达式1次或多次,例如 /o+/能够匹配hello,不能匹配h|
| ? |匹配前面的子表达式0次或1次,例如 /o?/能够匹配h,也能够匹配hello,当?跟在任何一个限制符后面时匹配模式是贪婪的(匹配将尽可能少的匹配字符)|
| \{n\} |匹配前面的子表达式确定的n次,例如 /o{2}/ 能够匹配food,但是不能匹配hello|
| \{n,\} |匹配前面的子表达式至少n次|
| \{n,m\} |匹配前面的子表达式至少n次且不大于m次,n<=m|
| . |匹配除 \n 之外的任何单个字符|
| `(x|y)` |匹配x或y,例如 /h|o/ 能够匹配h和o|;
| a-z |匹配字符范围内的字符,例如 /[a-z]/ 能够匹配字符a-z之间的所有小写字母|
| [^a-z] |匹配不在该范围内的所有字符|
| \b |匹配单词的边界,例如 /o\b/能够匹配hello,但是不能匹配helloa|
| \B |匹配非单词边界,例如 /o\B/能够匹配helloa,但是不能匹配hello|
| \d |匹配一个数字字符|
| \D |匹配一个非数字字符|
| \w |匹配包括下划线在内的任意单词字符,等价于[a-zA-Z0-9_]|
| \W |匹配任意非单词字符,等价于[^a-zA-Z0-9_]|
| \num |对所获取的引用的匹配,例如 /(o)\1/ 能够匹配helloo,但是不能匹配hello|
| \f |匹配换页符|
| \n |匹配一个换行符|
| \r |匹配一个换行符|
| \s |匹配一个空格符,等价于[ \f\n\r\t\v]|
| \S |匹配一个非空格符,等价于[^ \f\n\r\t\v]|
| \t |匹配制表符|
| \v |匹配垂直制表符|
相关文章
- solr 的Admin界面
query 1.q(query):定义查询的原始输入字符串。多个条件用AND、OR连接。一定存在在字段前加+号,不存在时在字段前面加-号 ``` company_name:上海有限责任公司 AND
- 编程常用词汇表
这里整理了一些常用词汇,供在编码中使用: 通用 数学 列表 时间 图像 文件目录 执行 业务 用户相关 文章相关 商品相关 优惠券相关 订单相关 这里总结了一些软件开发中常用的词汇,如
- solr性能优化
一、简介 Solr性能优化是一个很复杂的任务,也是一个长期与之斗争的过程。在开始之前,首先要对影响Solr性能的基本因素有个大致的认知。影响Solr性能的一个主要因素就是内存。Solr需要有足够的内
- python变量作用域
在Python中并不是所有的语句块中都会产生作用域。只有当变量在Module(模块)、Class(类)、def(函数)中定义的时候,才会有作用域的概念。 需要注意的是:在if-elif-else、f
- redis 主从复制
一、集群的作用 1.主从备份 防止主机宕机 2.读写分离 分担master的任务 3.任务分离,如从服务器分别担任备份工作与计算工作 二、redis集群配置 Master配置 1、关闭rdb快照
随机推荐
- solr 的Admin界面
query 1.q(query):定义查询的原始输入字符串。多个条件用AND、OR连接。一定存在在字段前加+号,不存在时在字段前面加-号 ``` company_name:上海有限责任公司 AND
- 编程常用词汇表
这里整理了一些常用词汇,供在编码中使用: 通用 数学 列表 时间 图像 文件目录 执行 业务 用户相关 文章相关 商品相关 优惠券相关 订单相关 这里总结了一些软件开发中常用的词汇,如
- solr性能优化
一、简介 Solr性能优化是一个很复杂的任务,也是一个长期与之斗争的过程。在开始之前,首先要对影响Solr性能的基本因素有个大致的认知。影响Solr性能的一个主要因素就是内存。Solr需要有足够的内
- python变量作用域
在Python中并不是所有的语句块中都会产生作用域。只有当变量在Module(模块)、Class(类)、def(函数)中定义的时候,才会有作用域的概念。 需要注意的是:在if-elif-else、f
- redis 主从复制
一、集群的作用 1.主从备份 防止主机宕机 2.读写分离 分担master的任务 3.任务分离,如从服务器分别担任备份工作与计算工作 二、redis集群配置 Master配置 1、关闭rdb快照