-正则表达式是一种文本模式的匹配工具。

-文章导读:

    --1.正则对象的属性和方法

    --2.字符串对象的方法

    --3.使用正则表达式:

      ---3.1 给字符串加上千分符

      ---3.2 字符串中出现次数最多的字母

      ---3.3 在多行中使用正则表达式

      ---3.4 从url中提取子域名

      ---3.5 分割Unicode字符

      ---3.6 在location对象中使用正则

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

[新建正则表达式]:

 var  regexp = /aabb/g; //g可省
var regexp = new Regexp("xyz","g"); //第二个参数可省

区别在于:

1.采用字面量的写法新建的正则表达式对象在代码编译时就会生成,是平常开发中常用的方式;

2.采用构造函数生成的正则对象要在代码运行时生成。

 [使用正则表达式]:

正则对象的方法是指这样使用的: RegExp对象.方法(字符串)

字符串对象的方法是这样使用:字符串.方法(RegExp对象)

一、 正则对象的属性和方法

1.1 正则对象的属性:

 ignoreCase //返回一个布尔值表示正则对象是否设置了i修饰符,是一个只读属性
global //表示正则对象是否设置了g修饰符,返回布尔值
multiline //表示是否设置了m修饰符,返回一个布尔值
lastIndex //返回下一次开始搜索的位置,该属性可读写,但只在设置了g修饰符时有意义
source //返回正则表达式的字符串形式(不包括反斜杠),只读属性

这样用:

  i  --执行忽略大小写的匹配
g --执行全局匹配(可以查看所有的匹配而不是只找到第一个匹配后就停止)
m --执行多行匹配

1.2 test方法

test方法返回布尔值,用来验证字符串是否符合某个模式。如果正则表达式带有g修饰符,则每一次test方法都从上一次匹配结束的位置开始匹配。

使用了g修饰符的正则对象,表示要记录搜索的位置,接着使用test方法,每次开始搜索的委会都是上一次匹配的后一个位置:

如果正则表达式是一个空字符串,则会匹配所有的字符串,但前提是使用new RegExp()的方式:

1.3 exec方法

exec()返回匹配的结果,匹配成功exec方法返回装有匹配结果的数组,匹配失败返回null:

如果正则表达式包含圆括号,则返回的数组会包括多个元素。首先是整个匹配成功的结果,后面是圆括号里匹配成功的结果,如果有多个圆括号,他们的匹配成功的结果都会成为数组元素:

对于调用exec方法后返回的数组具有以下两个属性:

 input --整个原待匹配的字符串
index --整个模式匹配成功的开始位置

同样,给正则表达式加上g修饰符就可以多次使用exec方法,下一次搜索的位置从上一次成功匹配结束的位置开始。

如果正则对象是一个空字符串:

二、字符串对象的方法

 match-----返回匹配的子字符串
search----搜索
replace---替换
split-----分割

2.1 match()方法

字符串对象的match方法与正则对象的exec方法比较类似:

但是如果正则表达式带有g修饰符,那么match方法与exec方法就有差别了:

可以看到match返回了所有成功匹配的结果,但是exec方法只返回了一个。

2.2 search方法

search方法返回匹配成功的位置在整个字符串中的索引,如果没有匹配成功任何字符则返回-1,search方法会自己忽略g修饰符。

2.3 replace方法

str.replace('搜索模式','替换的内容');

可以看到,如果正则表达式不带g修饰符,那么replace方法会替换第一个匹配成功的结果,如果加上了g修饰符,那么会替换所有匹配成功的值。

replace方法的第二个参数可以使用$符号,用来指代所要替换的内容:

 $&-----指代匹配的字符串
$`-----匹配结果前面的文本
$'-----匹配结果后面的文本
$n-----指代匹配成功的第n组内容,n从1开始
$$-----指代美元符号$

replace方法的第二个参数也可以是函数,用于将第一个参数匹配到的值替换为函数返回值。

同时,作为replace方法的第二个参数的函数也可以由多个参数。它的第一个参数是整个匹配的内容,第二个参数是组匹配(这时有多少个组匹配就有多少个参数),此外最后还可以添加两个参数,倒数第二个参数是扑捉到的内容在整个字符串中的位置,最后一个参数是原字符串。

2.4 split() 方法

split(‘字符串的分割正则’,‘返回数组的最大成员数’);返回分割后各部分组成的数组。

可以变换正则的匹配规则来分割字符串。

上面正则的匹配规则是以0或多个a来进行分割,如果加上括号则括号匹配的部分也就是分割规则也会作为数组成员返回。

三、使用正则表达式

正则表达式不仅灵活还很强大,用它能很简洁的实现很多实用的功能,下面简单列举一些:

3.1给字符串加千分符

          function spli(str){
var re = /(?=(?!\b)(\d{3})+$)/g;
return str.replace(re,',');
}
console.log(spli(str));

其中的(?=exp)用来匹配exp前面的位置,(?!exp)匹配后面跟的不是exp的位置,他们都是零宽断言。

如果要是不用正则表达式的话,代码会多些:

          var str = '12345432';//->[]
function spli(str){
var iNum = str.length%3;//->0,1,2
var prev = '';
var arr = [];
var iNow = 0;
var tmp = '';
//千分号是从后向前三位三位加的,所以把三位余出来的从前面提取到
if(iNum !=0){
prev = str.substring(0,iNum);
arr.push(prev);
}
//取到多余部分后面的
str = str.substring(iNum);
for(var i=0;i<str.length;i++){
iNow++;
tmp += str[i];
if(iNow==3 && tmp){
//数组里面放的是三位的数
arr.push(tmp);
tmp = '';
iNow = 0;
}
}
return arr.join(',');
}
console.log(spli(str));

3.2字符串中出现次数最多的字符

         var str = 'kkkkkkkaaakkkkkkaaaaasddd';
function most(str){
//排序,正则匹配子项
var arr = str.split('');
arr.sort();
str = arr.join('');
// \1匹配前面相同的,也就是说跟(\w)相同的
var re = /(\w)\1+/g;
var num = 0;
var value = '';
//这里的$0就是找到的重复的整体
str.replace(re,function($0,$1){
//alert($0);
if(num<$0.length){
num = $0.length;
value = $1;
}
});
return '出现次数最多的字符是'+value+'出现了'+num+'次';
}
console.log(most(str));

其中\1代表分组1匹配的文本。

3.3 在多行中使用正则表达式

^符号用来匹配输入/字符串的开始。如果多行(multiline)标志被设为 true,该字符也会匹配一个断行(line break)符后的开始处。

3.4 从url中提取子域名

上面的正则匹配/开始的字符串匹配到第一个.就停止了,http://长度为7,所以用了substr(7)之后就会返回子域名了。

3.5 分割Unicode字符

通常用来匹配字符的\w和\W只会匹配基本的ACSCII字符,要匹配Unicode字符的话就要另做处理了:

3.6 在location对象中使用正则

这里有个我越看越晕的例子,额:

来自小胡子==。[玩转正则之highlight高亮]

四、其他

正则表达式的收集:

[常用的正则表达式收集]

[js常用正则表达式]

参考资料:

[RegExp MDN]

[玩转正则之highlight高亮]

这里我只是总结了正则表达式相关的方法和属性,强烈建议阅读:正则表达式30分钟入门教程    它教会你如何写正则表达式,再结合文章上面提到的方法,写着写着,正则就不是那么遥不可及了,非常实用喔。

实战JS正则表达式的更多相关文章

  1. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

  2. 使用外部web组件-----easyUI、jQueryUI、Bootstrap、js正则表达式

    1.使用外部web组件,以Bootstrap为例 <head> <link rel='stylesheet'  href='bootstrap-3.3.0-dist/dist/css ...

  3. js正则表达式图形化工具-rline

    github地址:https://github.com/finance-sh/rline 在线demo: http://lihuazhai.com/demo/test.html 这是一个js正则表达式 ...

  4. Python之路-(js正则表达式、前端页面的模板套用、Django基础)

    js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  5. JS正则表达式大全

    转自:http://wenku.baidu.com/link?url=3y930kC7F6D3wQdMjQ3fVDmiA9Wfebs_QK0UB3N3mFaEoKg4ytZORPopxufeYA6si ...

  6. js正则表达式replace里有变量的解决方法用到RegExp类

    一直比较害怕使用正则表达式,貌似很深奥很复杂的样子,所以在用js操作字符串的时候,我最多使用的是replace.split.substring.indexOf等函数,这些函数有时候需要多次叠加使用,但 ...

  7. JS正则表达式验证账号、手机号、电话和邮箱

    JS正则表达式验证账号.手机号.电话和邮箱 效果体验:http://keleyi.com/keleyi/phtml/jstexiao/15.htm 验证帐号是否合法 验证规则:字母.数字.下划线组成, ...

  8. 初识JS正则表达式

    初识JS正则表达式 看到的使用的正则表达式练习:http://www.cnblogs.com/wenanry/archive/2010/09/06/1819552.html PS:本文参考李炎恢JS笔 ...

  9. 常用JS正则表达式

    常用JS正则表达式 收集一些常用的JavaScript正则表达式匹配规则,比如匹配电话号码.Email.中文字符.身份证号.邮编.QQ号.过滤空白行.匹配特定数字等.觉得这玩意是很有用的,只不过自己水 ...

随机推荐

  1. Conditional project or library reference in Visual Studio

    Conditional project or library reference in Visual Studio In case you were wondering why you haven’t ...

  2. byte[] 转十进制

    short s = 0; //一个16位整形变量,初值为 0000 0000 0000 0000 byte b1 = 1; //一个byte的变量,作为转换后的高8位,假设初值为 0000 0001 ...

  3. 学习微信小程序之css4设置颜色,单位表示,字体样式

    颜色的设置可以通过RGB设置 可以直接通过英文单词设置 可以通过16进制来设置 长度单位: 字体样式: 设置字体样式 字体粗细 设置字体风格 设置字间距

  4. LINUX 忘记root密码如何修改

    重启linux系统 3 秒之内要按一下回车,出现如下界面 然后输入e 在 第二行最后边输入 single,有一个空格.具体方法为按向下尖头移动到第二行,按"e"进入编辑模式 在后边 ...

  5. LeetCode 1. Two Sum

    Problem: Given an array of integers, return indices of the two numbers such that they add up to a sp ...

  6. 图解HTTP

    1.返回结果的HTTP状态码 a. 2xx 成功: 200 ok 204 No Content  206 Partial Content b. 3XX重定向:301 Moved Permanently ...

  7. HDU5800 To My Girlfriend(DP)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5800 Description Dear Guo I never forget the mom ...

  8. kafka的log存储解析——topic的分区partition分段segment以及索引等

    转自:http://blog.csdn.net/jewes/article/details/42970799 引言 Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相 ...

  9. Mac osx 安装PIL出现Some externally hosted files were ignored (use --allow-external PIL to allow).

    出现这个问题Some externally hosted files were ignored (use --allow-external PIL to allow)的主要原因是PIL的一些依赖库还没 ...

  10. NOI 题库 9272 题解

    9272   偶数个数字3 描述 在所有的N位数中,有多少个数中有偶数个数字3? 输入 一行给出数字N,N<=1000 输出 如题 样例输入 2 样例输出 73 Solution : 令f ( ...