前段时间需要用到比较多的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
属性包含了最后一次匹配中最后一个字符的下一个位置。  
 
 function
RegExpTest()  
 {  
 var ver = Number(ScriptEngineMajorVersion() + "."
+
ScriptEngineMinorVersion())

if (ver >= 5.5){ // 测试 JScript
的版本。  
 var src = "The rain in Spain falls mainly in the
plain.";  
 var re = /\w+/g; //
创建正则表达式模式。  
 var
arr;  
 while ((arr = re.exec(src)) !=
null)  
 document.write(arr.index + "-" + arr.lastIndex +
arr + "\t");  
 }  
 else{  
 alert("请使用 JScript
的更新版本");  
 }  
 }

语法 1 re =
/pattern/[flags]  
语法 2 re = new
RegExp("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的正则匹配的更多相关文章

  1. JavaScript 中正则匹配时结果不一致的问题

    创建示例项目 考察如下场景,我们有个输入框组件,输入时同时进行校验. interface IInputProps { label: string; } function Input({ label } ...

  2. javascript 之正则匹配HTML

    正则表达式 <(\S*?) [^>]*>.*?</\1>|<.*? /> 匹配 <html>hello</html>|<a> ...

  3. 常用的JavaScript正则匹配规则代码收藏,很实用

    收集一些常用的JavaScript正则表达式匹配规则,比如匹配电话号码.Email.中文字符.身份证号.邮编.QQ号.过滤空白行.匹配特定数字等.觉得这玩意是很有用的,只不过自己水平菜,老是自己写不出 ...

  4. JavaScript 正则匹配中文,中文符号,空格,全数字,以https:// 开头的url,用于各种场景的输入校验

    业务场景1: 密码输入框需要验证输入中文,中文符号,空格等情况,以便于给出错误提示 业务场景2: 输入框只允许输入数字的情况 业务场景3: 输入框允许输入均为数字或以https:// 开头的url的情 ...

  5. JavaScript——正则匹配、正则提取、正则替换

    正则匹配 // 匹配日期 var dateStr = '2015-10-10'; var reg = /^\d{4}-\d{1,2}-\d{1,2}$/ console.log(reg.test(da ...

  6. js正则匹配的一个日常应用

    应用实例 1 /** 将段落中的 \n 转换为 <p></p>, 规范存储 */ 2 function formatParagraphForStore(val) { 3 var ...

  7. JS中正则匹配的三个方法match exec test的用法

    javascript中正则匹配有3个方法,match,exec,test: match是字符串的一个方法,接收一个RegExp对象做为参数: match() 方法可在字符串内检索指定的值,或找到一个或 ...

  8. php中的正则函数主要有三个-正则匹配,正则替换

    php中变量的声明? 由于php声明变量的时候, 不支持使用 var关键字, 又不能直接写一个变量名字, 孤零零的放在那里, 所以, 在php中声明变量的方式, 同时也是给变量初始化的形式, 即: & ...

  9. phpstorm 正则匹配删除注释行(替换注释行为空行)

    使用phpstorm 来编写php 和javascript 代码,感觉还是不错的,用得也很舒服. 遇到了一个需求,有时候在阅读框架源代码的时候 , 想过滤(删除)掉源代码中的注释行,如果手动逐行删除显 ...

随机推荐

  1. Java-POJ1008-Maya Calendar

    题意:两种纪年方法的转换 水题,根据题目翻译成代码就可以了 居然WA了一次,避坑,output要先输出数据组数,痛心疾首啊!本来可以一次AC的. package poj.ProblemSet; imp ...

  2. keil里面的包

    1.使用Keil开发STM32程序时,需要下载STM32固件包 首先,keil就是一个编辑器,就跟记事本一样. 但keil还可以编译链接程序. 在创建一个工程时,要选择芯片序列. 要选择芯片序列的原因 ...

  3. 矩阵快速幂 裸 hdu1575

    裸题,求A^n次后的对角线数字之和 #include<cstdio> #include<algorithm> #include<string.h> using na ...

  4. Iris项目结构

  5. 初识hadoop --- (分布式文件系统 + 分块计算)

    [转载] + 整理 2016-11-18 使用范围: Hadoop典型应用有:搜索.日志处理.推荐系统.数据分析.视频图像分析.数据保存等. Hadoop历史 雏形开始于2002年的Apache的Nu ...

  6. Centos7 下mysql 密码重置

    Centos7 下mysql 密码重置 先停止mysql服务 mysqld_safe --skip-grant-tables & mysql mysql> use mysql;mysql ...

  7. 自带日期时间 showDatePicker显示中文日期_Flutter时间控件显示中文

    flutter showDatePicker showTimePicker显示中文日期 1.配置flutter_localizations依赖 找到pubspec.yaml配置flutter_loca ...

  8. Scala实现网站流量实时分析

    之前已经完成zookeeper集群.Hadoop集群.HBase集群.Flume.Kafka集群.Spark集群的搭建:使用Docker搭建Spark集群(用于实现网站流量实时分析模块),且离线分析模 ...

  9. RocketMQ-0.1

    rocketmq的主要部分是由4种集群构成的:namesrv集群.broker集群.producer集群和consumer集群. namesrv集群:也就是注册中心,rocketmq在注册中心这块没有 ...

  10. Hadoop架构: 流水线(PipeLine)

    该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览 流水线(PipeLine),简单地理解就是客户端向DataNode传输数据(Packet)和接收Dat ...