首页 > 代码库 > javascript的正则匹配

javascript的正则匹配

前段时间需要用到比较多的js代码,当时有点搞不清test和match方法的区别,向百度求助,找到了这边关于正则匹配的博文,感谢作者分享。

原文地址【http://blog.sina.com.cn/s/blog_89da3e5101013giy.html】

JS的正则表达式

rge.test(str) 检验目标对象中是否包含匹配模式,并相应的返回true或false   rge.source
str.search(rge) 将返回一个整数值,指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1
str.replace(re, function(){}) 替换匹配到的数值
rge.exec(str) 没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数
str.match(rge) 用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组(全文匹配模式g,否则只返回第

一个匹配的内容)
match 方法没有找到匹配,返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果
Input 属性包含整个的被查找字符串。
Index 属性包含了在整个被查找字符串中匹配的子字符串的位置。
LastIndex属性包含了最后一次匹配中最后一个字符的下一个位置。  
 
 functionRegExpTest()  
 {  
 var ver = Number(ScriptEngineMajorVersion() + "."+ScriptEngineMinorVersion())  
 if (ver >= 5.5){ // 测试 JScript的版本。  
 var src = "http://www.mamicode.com/The rain in Spain falls mainly in the";  
 var re = /\w+/g; //创建正则表达式模式。  
 vararr;  
 while ((arr = re.exec(src)) !=null)  
 document.write(arr.index + "-" + arr.lastIndex +arr + "\t");  
 }  
 else{  
 alert("请使用 JScript的更新版本");  
 }  
 }    
语法 1 re =/pattern/[flags]  
语法 2 re = newRegExp("pattern",["flags"])   
 g (全文查找出现的所有pattern)   
    i(忽略大小写)   
    m (多行查找)
 
定界符:/ /
前导字符:
元字符:规定前导字符在目标对象中出现的模式

“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次。 /fo+/ 
“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次。 /eg*/ 
“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。 /Wil?/ 

限定符:可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。 {n}n   {n,}   {n,m}  
        
 \s:用于匹配单个空格符,包括tab键和换行符;   
 \S:用于匹配除单个空格符之外的所有字符;   
 \d:用于匹配从0到9的数字;[0-9] 
 \D:用于匹配从0到9的数字;[^0-9]
 \w:用于匹配字母,数字或下划线字符;‘[A-Za-z0-9_]‘   
 \W:用于匹配所有与\w不匹配的字符;‘[^A-Za-z0-9_]‘   
 .:用于匹配除换行符之外的所有字符。   
 
 \cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。 x的值必须为 A-Z 或 a-z 之一。否

则,将 c 视为一个原义的 ‘c‘字符。   
 \f 匹配一个换页符。等价于 \x0c 和\cL。   
 \n 匹配一个换行符。等价于 \x0a 和\cJ。   
 \r 匹配一个回车符。等价于 \x0d 和\cM。   
 \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v]。   
 \S 匹配任何非空白字符。等价于 [^\f\n\r\t\v]。   
 \t 匹配一个制表符。等价于 \x09 和\cI。   
 \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

定位符:规定匹配模式在目标对象中的出现位置。 较为常用的定位符包括: “^”, “$”, “\b” 以及“\B”。 

 “^”定位符规定匹配模式必须出现在目标字符串的开头  
 “$”定位符规定匹配模式必须出现在目标对象的结尾  
 “\b”定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一  
 “\B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,  

为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。

例如:
   /([a-z][A-Z][0-9])+/ 上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0”等相匹配。  
  “|”。例如:/to|too|2/ 上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。
   否定符 “[^]”。与我们前文所介绍的定位符 “^”不同,否定符 “[^]”规定目标对象中不能存在模式中所规  定

的字符串。

   当“^”出现在“[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定  位

符。
   ? 当该字符紧跟在任何一个其他限制符 (*, +, ?,{n}, {n,}, {n,m})后面时,匹配模式是非贪婪的。非贪婪模   式

尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串   

"oooo",‘o+?‘ 将匹配单个 "o",而 ‘o+‘ 将匹配所有‘o‘。   
   . 匹配除 "\n" 之外的任何单个字符。要匹配包括‘\n‘ 在内的任何字符,请使用象 ‘[.\n]‘ 的模式。

优先级如下:  
 1.\ 转义符  
 2.(), (?:), (?=), []圆括号和方括号  
 3.*, +, ?, {n}, {n,}, {n,m}限定符  
 4.^, $, \anymetacharacter位置和顺序  
 5.|“或”操作  

正则表达式
"^\\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]*)))$"//负浮点数   
"^(-?\\d+)(\\.\\d+)?$"  //浮点数   
"^[A-Za-z]+$"  //由26个英文字母组成的字符串   
"^[A-Z]+$"  //由26个英文字母的大写组成的字符串   
"^[a-z]+$"  //由26个英文字母的小写组成的字符串   
"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串   
"^\\w+$"  //由数字、26个英文字母或者下划线组成的字符串   
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址   
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url  
"^[A-Za-z0-9_]*$" 
/^\[ \t]*$/ "^\[ \t]*$"匹配一个空白行。   
/\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个ID号码是否由一个2位数字,一个连字符以及一个5位数字组成。   
/<(.*)>.*<\/\1>/"<(.*)>.*<\/\1>"匹配一个 HTML 标记。

javascript的正则匹配