javascript正则表达式简述
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正则表达式简述的更多相关文章
- Javascript 正则表达式简述
本文地址:http://www.cnblogs.com/blackmanba/p/regular-expressions-introduce.html 或者 http://forkme.info/re ...
- JavaScript正则表达式,你真的知道?
一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...
- 【JS】javascript 正则表达式 大全 总结
javascript 正则表达式 大全 总结 参考整理了一些javascript正则表达式 目的一:自我复习归纳总结 目的二:共享方便大家搜索 微信:wixf150 验证数字:^[0-9]*$ 验证n ...
- 理清JavaScript正则表达式--上篇
在JavaScript中,正则表达式由RegExp对象表示.RegExp对象呢,又可以通过直接量和构造函数RegExp两种方式创建,分别如下: //直接量 var re = /pattern/[g | ...
- 理清JavaScript正则表达式--下篇
紧接:"理清JavaScript正则表达式--上篇". 正则在String类中的应用 类String支持四种利用正则表达式的方法.分别是search.replace.match和s ...
- JavaScript正则表达式详解(一)正则表达式入门
JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- Python自动化 【第十八篇】:JavaScript 正则表达式及Django初识
本节内容 JavaScript 正则表达式 Django初识 正则表达式 1.定义正则表达式 /.../ 用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...
- JavaScript正则表达式下——相关方法
上篇博客JavaScript 正则表达式上——基本语法介绍了JavaScript正则表达式的语法,有了这些基本知识,可以看看正则表达式在JavaScript的应用了,在一切开始之前,看看RegExp实 ...
随机推荐
- GDB源代码查找路径
在gdb程序的时候,有时候会发现源代码文件找不到,对于那些带调试信息的系统库或者第三方库,很多时候当你真正想gdb去追他源代码的时候你会发现gdb根本找不到这些源代码路径.这个时候有两种选择: [1] ...
- php session 自定义的设置测试
<?php // ini_set('session.save_handler', 'user'); // 注意 set_session_save_handler() 一定要在 session_s ...
- 解决SDK Manager无法更新问题
因为google被封了,导致Android SDK Manager无法更新,解决方案如下: 1.选择tools->options,跳出Settings页面 2.设置HTTP Proxy代理,设置 ...
- paramiko模块实现堡垒机
通过SSHClient 执行命令 """通过用户名密码验证""" import paramiko # 创建 SSH 对象 ssh = par ...
- Day15 HTML补充、初识JavaScript
一.上节回顾 上节回顾: HTML 头部信息:编码.title.style.link(导入css文件) 身体: 内联 块级 --->inline-block(既有内联效果又有块级效果) a标签: ...
- Java-反射再学习
反射之中包含了一个“反”的概念,所以要想解释反射就必须先从“正”开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化对象,但是“反”指的是通过对象找到类. packa ...
- LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法
LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法 题记 本文是LeetCode题库的第五题,没想到做这些题的速度会这么慢,工作之 ...
- Tomcat架构(二)
5.容器组件 这一小节中我们将讨论请求处理组件:引擎(engine).虚拟主机.上下文(context)组件. 5.1.引擎(engine) 引擎表示可运行的Catalina的servlet引擎实例并 ...
- The Lost Art of C Structure Packing
对齐要求 首先需要了解的是,对于现代处理器,C编译器在内存中放置基本C数据类型的方式受到约束,以令内存的访问速度更快. 在x86或ARM处理器中,基本C数据类型通常并不存储于内存中的随机字节地址.实际 ...
- Java语言基础(二) Java关键字
Java语言基础(二) Java关键字 Java关键字比较多,我就不列举出来了,只记录一些常用的小知识点: ①Java的关键字只有小写. ②then.sizeof都不是Java的关键字,熟悉C++的程 ...