compile

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

  1. var patt = /man/g;
  2. var str = "man and woman";
  3. str.replace(patt, str);
  4. patt = /man|woman/g;
  5. patt.compile(patt);
  6. str.replace(patt, str);

exec

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

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

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

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

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

  1. String.prototype.filterExp = function() {
  2. var _this = this;
  3. var patt = /(.).*\1/;
  4. var result;
  5. while((result = patt.exec(_this)) != null) {
  6. _this = _this.substring(0, result.index + 1) + _this.substring(result.index + 1).replace(new RegExp(result[1], "g"), "");
  7. patt.lastIndex = 0;
  8. }
  9. return _this;
  10. }
  11. var str = "habacabefgeeii";
  12. var rel = str.filterExp();
    console.log(rel);

test

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

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

  

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

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

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

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

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

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

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

  1. 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}?

效果区别:

  1. var str = "6hello6 6hello6 6hello6";
  2. var patern = /6(.+)6/g; //贪婪模式
  3. var patern2 = /6(.+?)6/g; //非贪婪模式
  4. var rel = str.replace(patern, "XXX");//结果为"6XXX6"
  5. 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. C++中数字与字符串之间的转换

    原文地址:http://www.cnblogs.com/luxiaoxun/archive/2012/08/03/2621803.html 1.字符串数字之间的转换 (1)string --> ...

  2. js 的对象--如何定义一个对象

    通过var object={}  对象字面量,可以叫对象直接量来自定义一个对象 对象自面量是一个表达式,这个表达式的每次运算都创建并初始化一个新对象.每次计算对象字面量的时候,也都会计算他的每个属性值 ...

  3. 用MFC如何高效地绘图

    显示图形如何避免闪烁,如何提高显示效率是问得比较多的问题.而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案.     MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单,只 ...

  4. Python 学习笔记(3) - 控制流、函数

    控制流语句if.while.for.break.continue以上从最终作用效果来讲,同学过的其他语言没有什么不同.需要注意的只是语法,而Python 在语法上是如此让人赞叹和喜欢啊. 控制流语句的 ...

  5. Opencv实现的简易绘图工具

    第一次写博,还是个菜鸟.最近开始学习Opencv,试着写了个简易的绘图工具(目前只写了画线和橡皮擦部分,画其它图形还有待往里添加),也算是记录自己的学习之路. #include "stdaf ...

  6. ie8如何支持html5

    两种方法 : 一:Coding JavaScript <!--[if lt IE9]> <script>    (function() {     if (!      /*@ ...

  7. web sql Database

    http://www.ibm.com/developerworks/cn/web/1108_zhaifeng_websqldb/ http://baishanheishui.iteye.com/blo ...

  8. codeforces D. Multiplication Table

    http://codeforces.com/contest/448/problem/D 题意:一个n×m的矩阵,a[i][j]=i*j; 然后把a数组排序,找出第k个数. 思路:1-n×m二分枚举,然 ...

  9. jQuery EasyUI parser 的使用场景

    转自原文地址:http://www.easyui.info/archives/216.html parser,故名意思,就是解析器的意思,别看他只有那么几行代码,jQuery Easyui 能够根据c ...

  10. Android日志框架darks-logs使用教程

    一.配置文件 在使用darks-logs之前,我们需要为它创建一个名叫logd.properties的配置文件.如果你是需要在JAVA或WEB上使用该组件,那么你可以像配置log4j一样将它放在cla ...