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实 ...
随机推荐
- wamp不能使用phpmyadmin,提示“You don't have permission to access /phpmyadmin/ on this server.” 转载
换了win8之后wamp明显不怎么好用了,显示80端口被system占用,后是masql出现了403错误,多番百度谷歌找到了解决方案,这里与大家分享 当你安装完成wamp后,打开localhost或i ...
- Windows Phone 之播放视频
在Windows Phone 7中播放视频有两种方式, (1)使用MediaElement 控件来播放:用MediaElement 控件来播放视频比较灵活,你需要自己去实现播放暂停进度条等等的功能,播 ...
- windows下node.js+sublime中安装coffeescript
node.js中安装Coffeescript 1.我的node.js安装目录 2.node.js 全局模块所在目录 3.node.js安装coffeescript npm install -g c ...
- 使用css3画饼图
CSS3 Gradient介绍参考地址: http://www.cnblogs.com/lhb25/archive/2013/01/30/css3-linear-gradient.html http: ...
- X-window
X-Window(也常称为X11或X)系统是一种以位图方式显示的软件视窗系统,最初是1984年麻省理工学院的研究,之后变成UNIX.类UNIX. 以及OpenVMS等操作系统所一致适用的标准化软件工具 ...
- pyqt5 窗体布局
窗体布局 1使用qtdesigner新建一个对话框,然后拖放几个按钮和文本框,按钮使用水平布局,效果如下: 鼠标选中水平布局再选中文本框,进行垂直布局,如下: 垂直布局后的效果如下: 然后,如何让窗体 ...
- bzoj 1257: [CQOI2007]余数之和sum 数学 && 枚举
1257: [CQOI2007]余数之和sum Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 1779 Solved: 823[Submit][Sta ...
- BZOJ 3569 DZY Loves Chinese II
Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上 ...
- BZOJ 1876 SuperGCD
Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求 ...
- 如何为企业选择最理想的Linux服务器系统?
[2013年10月12日 51CTO外电头条]什么样的Linux服务器最合适您的企业?简言之,它需要为员工带来工作所需的理想支持效果. 相对于成百上千种Linux桌面系统,Linux服务器系统的数量其 ...