正则表达式:javascript正则不完全精简说明

来源:互联网 发布:淘宝俄罗斯代购 编辑:程序博客网 时间:2024/05/16 10:44

以前一直想学学  正则表达式 今天无意中发现这篇文章 仔细拜读后 发现还懂了不少 收录备学ING,,,

转自:http://lingoosoft.blog.ccidnet.com/blog/ccid/do_showone/tid_113214.html

简单的说,正则表达式是一种可以用于模式“匹配”和“替换”的强有力的工具。

语法格式:以字符“/”开始和结束,其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。

元字符:所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
“+”规定其前导字符必须在目标对象中连续出现一次或多次。
“*”规定其前导字符必须在目标对象中出现零次或连续多次。
“?”规定其前导对象必须在目标对象中连续出现零次或一次。
“/s”用于匹配单个空格符,包括tab键和换行符;  
“/S”用于匹配除单个空格符之外的所有字符;  
“/d”用于匹配从0到9的数字;
“/D”匹配一个非数字字符。等价于 [^0-9];
“/w”用于匹配字母,数字或下划线字符;  
“/W”用于匹配所有与/w不匹配的字符;  
“/f”匹配一个换页符。等价于 /x0c 和 /cL;
“/n”匹配一个换行符。等价于 /x0a 和 /cJ;
“/r”匹配一个回车符。等价于 /x0d 和 /cM;
“/t”匹配一个制表符。等价于 /x09 和 /cI;
“/v”匹配一个垂直制表符。等价于 /x0b 和 /cK;
“.”用于匹配除换行符之外的所有字符;
“/cx”匹配由x指明的控制字符。例如,/cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。


限定符:这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。
{n} n 是一个非负整数。匹配确定的 n 次。
{n,} n 是一个非负整数。至少匹配 n 次。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。请注意在逗号和两个数之间不能有空格。

“?”当该字符紧跟在任何一个其他限制符(*, +, ?, {n}, {n,}, {n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

定位符:定位符用于规定匹配模式在目标对象中的出现位置。
“^”定位符规定匹配模式必须出现在目标字符串的开头。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '/n' 或 '/r' 之后的位置。
“$”定位符规定匹配模式必须出现在目标对象的结尾。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '/n' 或 '/r' 之前的位置。
“/b”定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一  
“/B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。

正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。
/[A-Z]/  上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。  
/[a-z]/  上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。  
/[0-9]/   上述正则表达式将会与从0到9范围内任何一个数字相匹配。  
/([a-z][A-Z][0-9])+/ 上述正则表达式将会与任何由字母和数字组成的字符串,如“aB0”等相匹配,“abc”不匹配。
“()”符号包含的内容必须同时出现在目标对象中。

在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符“|”。

否定符“[^]”:否定符“[^]”规定目标对象中不能存在模式中所规定的字符串。一般来说,当“^”出现在“[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符。

转义符“/”:原样匹配“/”之后的字符。

在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先级顺序来求值。优先级如下:
1./ 转义符  
2.(), (?:), (?=), [] 圆括号和方括号  
3.*, +, ?, {n}, {n,}, {n,m} 限定符  
4.^, $, /anymetacharacter 位置和顺序  
5.|“或”操作


RegExp()对象中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。
var pattern = //d/;
pattern.test("123");


正则表达式模式以及应用模式的标志:
语法1:re = /pattern/[flags]  
语法2:re = new RegExp("pattern",["flags"])
参数:
re
必选项。将要赋值为正则表达式模式的变量名。
Pattern
必选项。要使用的正则表达式模式。如果使用语法1,用 "/" 字符分隔模式。如果用语法2,用引号将模式引起来。
Flags
可选项。如果使用语法2 要用引号将flag引起来。标志可以组合使用,可用的有:
g (全文查找出现的所有 pattern)  
i (忽略大小写)  
m (多行查找)


RegExp()对象中的方法:
用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。rgExp.exec(str)
返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。rgexp.test(str)
使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。stringObj.match(rgExp)
返回与正则表达式查找内容匹配的第一个子字符串的位置。stringObj.search(rgExp)


常用列表:
/^/[ /t]*$/ 匹配空白行。
/<(.*)>.*<///1>/ 匹配 HTML 标记。
/^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$/ 匹配email地址
/^[a-zA-z]+://(/w+(-/w+)*)(/.(/w+(-/w+)*))*(/?/S*)?$/ 匹配url
/^[0-9.]{1,20}$/ 匹配IP地址
/^[a-zA-Z0-9 ]{3,12}$/ 匹配邮政编码
/^[+]{0,1}(/d){1,3}[ ]?([-]?((/d)|[ ]){1,12})+$/ 匹配手机号
/^[+]{0,1}(/d){1,3}[ ]?([-]?((/d)|[ ]){1,12})+$/ 匹配普通电话

/^(-?/d+)(/./d+)?$/ 匹配浮点数
/^/d+$/ 匹配非负整数(正整数 + 0)  
/^[0-9]*[1-9][0-9]*$/ 匹配正整数  
/^((-/d+)|(0+))$/ 匹配非正整数(负整数 + 0)  
/^-[0-9]*[1-9][0-9]*$/ 匹配负整数  
/^-?/d+$/ 匹配整数  
/^/d+(/./d+)?$/ 匹配非负浮点数(正浮点数 + 0)  
/^(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*))$/ 匹配正浮点数
/^((-/d+(/./d+)?)|(0+(/.0+)?))$/ 匹配非正浮点数(负浮点数 + 0)
/^(-(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*)))$/ 匹配负浮点数

原创粉丝点击