compile

编译或改变字符串,参数跟new RegExp相同

var patt = /man/g;
var str = "man and woman";
str.replace(patt, str);
patt = /man|woman/g;
patt.compile(patt);
str.replace(patt, str);

exec

检索字符串中正则表达式的匹配

该方法在非全局匹配模式下跟stringObject下的match方法作用一致,返回的结果也一致,返回一个数组,数组的第一个元素是与正则表达式相匹配的文本,之后的项是与子表达式相匹配的文本,index属性代表匹配到的子字符串的首字符在父串中的位置,input属性是父串的值,如果未匹配到,则返回null

在全局匹配模式下,需要循环调用exec方法,exec会从RegExpObject对象下的lastIndex属性指定的字符处开始检索字符串,每次匹配后,lastIndex都会改变为当前匹配到的子文本的最后一个字符的下一个位置,直到返回null。所以在全局模式下完成一个字符串的匹配之后,再用该正则表达式匹配别的文本,需要先手动把正则表达式的lastIndex属性重置为0。全局模式下,只有exec才能匹配出所有的信息,包括子表达式所匹配的文本和文本对应的位置。

var patt = /(hello)|(world)/g;
var str = "hello world,helo world";
var result;
while((result = patt.exec(str)) != null) {//注意此处的写法啊,(result = patt.exec(str) != null),而不是result = patt.exec(str) != null,想一下有何不同,算数表达式的优先级问题
console.log(result);
console.log(patt.lastIndex);
}

下面封装一个方法,去除字符串中的重复字符(\1表示从左到右的第一个子表达式所匹配到的文本)

String.prototype.filterExp = function() {
var _this = this;
var patt = /(.).*\1/;
var result;
while((result = patt.exec(_this)) != null) {
_this = _this.substring(0, result.index + 1) + _this.substring(result.index + 1).replace(new RegExp(result[1], "g"), "");
patt.lastIndex = 0;
}
return _this;
}
var str = "habacabefgeeii";
var rel = str.filterExp();
console.log(rel);

test

检索子一个字符串是否匹配某个正则表达式,匹配返回true,否则false

var patt = new RegExp("how","gi");
patt.test("HOW are you");

  

匹配中文字符的正则表达式: [\u4e00-\u9fa5] 
匹配双字节字符(包括汉字在内):[^\x00-\xff] 
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;} 

匹配空行的正则表达式:\n[\s| ]*\r 
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 
匹配首尾空格的正则表达式:(^\s*)|(\s*$)

String.prototype.trim = function() {
return this.replace(/(^\s*)|(\s*$)/g, "");
}

用正则表达式限制只能输入数字

onkeyup="value = value.replace(/[^\d]/g, '')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g, ''))"

用正则表达式限制只能输入中文

onkeyup="value = value.replace(/[^\u4e00-\u9fa5]/g, '')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4e00-\u9fa5]/g, ''))"

\d 数字:[0-9] 
\D 非数字: [^0-9] 
\s 空白字符:[ \t\n\x0B\f\r] 
\S 非空白字符:[^\s] 
\w 单词字符:[a-zA-Z_0-9] 
\W 非单词字符:[^\w]

贪婪匹配和非贪婪匹配,正则表达式默认为贪婪匹配,尽量往多了匹配

贪婪 惰性
+ +?
? ??
* *?
{n,m} {n,m}?
{n,} {n,}?
{n} {n}?

效果区别:

var str = "6hello6 6hello6 6hello6";
var patern = /6(.+)6/g; //贪婪模式
var patern2 = /6(.+?)6/g; //非贪婪模式
var rel = str.replace(patern, "XXX");//结果为"6XXX6"
var rel2 = str.replace(patern2, "XXX");//结果为"6XXX 6XXX6 6XXX6";

javascript正则表达式简述的更多相关文章

  1. Javascript 正则表达式简述

    本文地址:http://www.cnblogs.com/blackmanba/p/regular-expressions-introduce.html 或者 http://forkme.info/re ...

  2. JavaScript正则表达式,你真的知道?

    一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...

  3. 【JS】javascript 正则表达式 大全 总结

    javascript 正则表达式 大全 总结 参考整理了一些javascript正则表达式 目的一:自我复习归纳总结 目的二:共享方便大家搜索 微信:wixf150 验证数字:^[0-9]*$ 验证n ...

  4. 理清JavaScript正则表达式--上篇

    在JavaScript中,正则表达式由RegExp对象表示.RegExp对象呢,又可以通过直接量和构造函数RegExp两种方式创建,分别如下: //直接量 var re = /pattern/[g | ...

  5. 理清JavaScript正则表达式--下篇

    紧接:"理清JavaScript正则表达式--上篇". 正则在String类中的应用 类String支持四种利用正则表达式的方法.分别是search.replace.match和s ...

  6. JavaScript正则表达式详解(一)正则表达式入门

    JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...

  7. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  8. Python自动化 【第十八篇】:JavaScript 正则表达式及Django初识

    本节内容 JavaScript 正则表达式 Django初识 正则表达式 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  9. JavaScript正则表达式下——相关方法

    上篇博客JavaScript 正则表达式上——基本语法介绍了JavaScript正则表达式的语法,有了这些基本知识,可以看看正则表达式在JavaScript的应用了,在一切开始之前,看看RegExp实 ...

随机推荐

  1. 关于Apple设备私有的apple-touch-icon属性详解

    以前我们用过favicon在浏览器给网站进行身份标识,用法如下: <link href="http://image.feeliu.com/web/favicon.ico" r ...

  2. Windows Phone 之文件下载进度和速度显示

    用http协议来下载网络上的文件,通常我们需要获取文件的下载进度和下载的速度来给用户等待过程的一个交代,那么在windows phone 7下可以使用WebClient类来实现这一功能,HttpWeb ...

  3. 上传图片带预览功能兼容IE和火狐等主流浏览器

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. [转] CSS3混合模式mix-blend-mode/background-blend-mode简介 ---张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=4819 一.关于混合模 ...

  5. 配置处理结果result

    Action处理完用户请求后返回一个字符串,整个字符串就是一个逻辑视图名. 除此之外,struts2还支持多种结果映射,struts2将结果转为实际资源时,不仅可以是JSP视图资源,也可以是FreeM ...

  6. 学习hamcrest和mockito时的总结和demo

    UT中需要的jar Junit4.1X.jar hamcrest-library-1.x.jar hamcrest-core-l.x.jar mockito-all-1.10.x.jar Junit ...

  7. Android Activity 管理

  8. Python 学习之urllib模块---用于发送网络请求,获取数据

    1.urllib urllib是Python标准库的一部分,包含urllib.request,urllib.error,urllib.parse,urlli.robotparser四个子模块. (1) ...

  9. paramiko模块实现堡垒机

    通过SSHClient 执行命令 """通过用户名密码验证""" import paramiko # 创建 SSH 对象 ssh = par ...

  10. mac+eclipse+svn+maven经验总结(转)

    1.Eclipse for Mac:http://mirrors.ustc.edu.cn/eclipse/technology/epp/downloads/release/indigo/SR2/ecl ...