[正则表达式](自己使用总结)
2015-02-13 10:55
260 查看
[正则表达式](自己使用总结)
博客分类:Web前端-JS语言核心
正则表达式JavaScript
作者:zccst
参考多处资料
2014-04-23
一、基础
1,常用各种语法
(1)直接量字符
\0
\t
\n
\v
\f
\r
\b(匹配一个单词边界), \B(不匹配单词边界)
\NUM(匹配NUM个,如(.)\1匹配两个连续相同的字符), \oNUM(八进制), \xNUM(十六进制)
//标点符号
^, $ .
:
=
(2)字符
\s(匹配空白字符), \S(匹配非空白字符)
\w(匹配字母,数字或下划线字符), \W
\d(匹配一个数字,/\d/=/[0-9]/), \D(非数字,/\D/=/[^0-9]/)
[a-z]表示匹配字符集中任意一个,[^a-z]不匹配字符集中任意一个
(3)重复
*(0次或多次),
+(1次或多次),
?(0次或1次)
例子:
/\s+java\s+/ 匹配前后带有一个或多个空格的字符串"java"
/[^(]*/ 匹配一个或多个左括号的字符
{n}匹配n次,{n,m} 表示匹配n到m次数,{n,}匹配n次以上
例如,
例子1:
/\d{2,4}/ 匹配2-4个数字
/\w{3}\d?/ 精确匹配三个单词和一个可选的数字
例子2:'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
例子3:\{([a-zA-Z_]{3,})\}
解析,
(1)先看括号内([a-zA-Z_]{3,})
[a-zA-Z_] 意思是匹配a-z、A-Z和下划线字符
{3,} 意思是上面的重复三次及以上,即连续三个字符及以上为符合条件
(2)在大括号内\{\}
如果不用转移,{}相当于出现次数,如果使用转移,则为大括号自身。
//贪婪模式
贪婪:尽可能多的匹配
不贪婪:在遇到限定符*,+,?,{n},{n,},{n,m}时,例'o+?'匹配o,'o+'匹配所有
patten
?:patten industr(?:y|ies)
?=patten windows?=95|98|2000
?!=patten windows?!=95|98|2000
(4)选择、分组和引用
二、函数
1,RegExp函数
exec
test
2,字符串函数
match
search
replace
split
1,RegExp函数
(1)exec
exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法以及支持正则表达式的 String 对象的方法更为复杂。
如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1
个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2
个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index
属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。我们可以看得出,在调用非全局的 RegExp
对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。
例
Js代码
function execDemo(){
var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain mainly";
re = /[\w]*(ai)n(ly)/ig;
r = re.exec(s);//此结果只是匹配的第一个结果。不过里面还是一个数组
document.write(r + "<br/>");
console.log(r);
for(key in r){
document.write(key + "-" + r[key] + "<br/>");
console.log(key , "-" , r[key])
}
alert(r['lastIndex']);
}
execDemo();
r打印出来的结果是
[0] mainly
[1] ai
[2] ly
index 24
input The rain in Spain falls mainly in the plain mainly
返回所有匹配结果,可以使用while
while ((result = re.exec(s)) != null) {
}
(2)test
返回一个 Boolean 值,它指出在被查找的字符串中是否匹配给出的正则表达式。
rgexp.test(str)
例如:
var browser = {};
var ua = navigator.userAgent;
//是否为Gecko内核
browser.isGecko = /gecko/i.test(ua) && !/like gecko/i.test(ua);
2,字符串函数
(1)match
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
Js代码
var name = "JeffreyWay";
name.match(/e/); //e
name.match(/e/g); //e,e,还可以name.match(/e/g)[1]
var string = 'This is just a string with some 12345 and some !@#$ mixed in.';
alert(string.match(/[a-z]+/gi)); // alerts "This,is,just,a,string,with,some,and,some,mixed,in"
理由:可以匹配一个或多个大写或小写字母。i不区分大小写,g全局
如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject
中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回
null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0
个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。
index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。
如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject
中的所有匹配子字符串。若没有找到任何匹配的子串,则返回
null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是
stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。
注意:在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。
(2)search
(3)replace
使用详见:http://zccst.iteye.com/admin/blogs/1672814
(4)split
var str = 'this is my string';
alert(str.split(/\s/)); // alerts "this, is, my, string",可以str.split(/\s/)[3]
相关文章推荐
- 正则表达式的一些总结(供自己复习使用)
- 正则表达式使用总结--记录项目中遇到的自己未解决的正则
- 使用python和正则表达式获取url,及总结
- 正则表达式实现资料验证的技术总结(转贴)收藏自己看
- 使用正则表达式写一个网页爬虫案例获取指定文档中的邮件地址保存到自己指定的文件夹中
- 最近在编写一些bat工具时,发现自己对lua的io和正则表达式使用没什么了解,网络上转载解决问题后的文章。
- js正则表达式使用总结
- 正则表达式使用总结
- "php"正则表达式使用总结
- 正则表达式使用总结
- 自己总结的正则表达式的JS验证!
- C#和Javascript中 正则表达式使用的总结
- 正则表达式总结转义字符 \ 转义紧随的元字符 \Q 转义所有紧随的元字符直到\E \E 与\Q搭配使用,转义包含的所有元字符 \\
- 自己总结的正则表达式的JS验证!
- .net验证控件的属性与使用技巧---总结及正则表达式语法
- java正则表达式使用总结
- 学习总结-常用API:正则表达式的使用
- JAVA正则表达式使用总结
- awk-grep-sed简单使用总结(正则表达式的应用)
- 正则表达式筛选数据 表达式语法 自己总结的