javascript:正则表达式

正则表达式是描述字符模式的对象,在javascript中由RegExp(RegularExpression)类表示,String和RegExp都定义了支持正则地

  正则表达式是描述字符模式的对象,在javascript中由RegExp(RegularExpression)类表示,String和RegExp都定义了支持正则地方法,且基本语法来自Perl5

导航

名词解释-->正则语法-->支持正则的对象-->demo-->瞎BB

名词解释

直接量字符:常量字符,单个字符,其length==1,即一个UTF-16编码
字符类:可以代表一串字符
量词:代表前方字符出现的次数
选择与分组:过滤-->将匹配到的对象当作主体,在主体中"再次"获取所需要的数据
描字符:定位,对位置的表示
修饰符:高级匹配规则

JavaScript中的正则定义/语法

直接常量符

javascript采用UTF-16编码的Unicode字符集,对于一些特殊字符,既可以直接使用其编码也可以使用转义符,简单地说直接常量符就是javascript的字符,与正则里直接使用,完全没区别(除了1.\cX,反正不会用,2.字符里的\”和\',在正则里直接使用"',反正不会错,3.退格符常量是[\b])

字符助记含义
字母和数字   自身
\o Null->0->o NUL字符(\u0000)
\t Horizontal Tab (水平制表) 制表符(\u0009)
\n New Line(原本是Line Feed 馈行,缩写是LF) 换行符(\u000A)
\v Vertical Tab (垂直制表) 垂直换行符(\u000B)
\f Form Feed (馈页) 换页符(\u000C)
\r Carriage Return (回车) 回车符(\u000D)
\xnn 0x十六进制,单字符集(Latin1或者ISO-8859-1) 由十六进制数nn指定的拉丁字符,简单地说就是ASCII,如\x0A->\n
\uxxxx Unicode 由十六进制数xxxx指定的Unicode字符
\cX Control(控制) 包括\u0000-\u001f与\u007f在内的33个表示控制功能的字符,\cX只能在正则中使用

 


字符类

将直接常量放入括号内就组成了字符集合+使用助记符表示的常用字符集合,尽管称之为集合,实际上其只用来描述(代表)一个字符,很悲剧的看到助记符仅跟ASCII码有关

字符助记含义
[……]   方块内的任意字符
[^……]   不在方块内的任意字符
.   终止符以外的任意字符
\w word 任意ASCII组成的单词->[a-zA-Z0-9]
\W 非word 非任意非ASCII组成的单词->[^a-zA-Z0-9]
\s space 任意Unicode空白符
\S 非space 任意非Unicode空白符
\d digit 任意ASCII组成的数字->[0-9]
\D 非digit 任意非ASCII组成的数字->[^0-9]
[\b]   退格符直接量,使用[],将特殊意义的\b转换为

 


常量

指定字符充分的标记,尽管称之为重复,其代表的只是匹配前一项的重复,而不是匹配到的字符的重复(即语法的常量,而非实例的常量,小绕口)

字符含义
{n,m} 匹配前一项至少n次,但不超过m次
{n,} 匹配前一项至少n次
{n} 匹配前一项n次
? 可选-->{0,1}
+ 至少/存在-->{1,}
* 任意次数->{0,}

 


选择,分组,引用

()拥有2中意义
1.分组操作,也是一般数学公式中的分组
2.匹配子项:将正则匹配到的主体称为母体,将左边第一个小括号内的数据称为第一子项,依次类推

字符含义
| 选择,匹配该字符左侧或右侧的表达式,即语法中的或
(...) 组合+记忆(子项匹配),将匹配到的字符看做母体,在母体中继续进行匹配,非常方便
(?:) 只组合
\n 子项引用,n为数字,即对匹配到的字符进行使用

 


描字符

字符含义
^ 匹配前一项至少n次,但不超过m次
$ 匹配前一项至少n次
\b 匹配一个单词的边界,就是位于\w和\W之间的位置或\w与开头或结尾之间的位置
\B 非\b
(?=p) 零宽正向先行断言,接下来的字符与p相同,但主体不包含p
(?!p) 零宽负向先行断言,接下来的字符与p不相同,但主体不包含p

 


修饰符

字符含义
i 执行不区分大小写的匹配
g 执行全局匹配
m 多行匹配模式.将\n或\r看做开头或结尾,在语法中结合^或$使用

 

支持正则的对象

String 对象常用的四个方法,可以完成大多数情况下的正则需求

方法描述
match(searchvalue,regexp) 找到一个或多个正则表达式的匹配。
replace(regexp/substr,replacement) 替换与正则表达式匹配的子串。(replacement可以是方法,故replace是循环遍历字符串的一种方式)
search(regexp) 检索与正则表达式相匹配的值。
split(separator,howmany) 把字符串分割为字符串数组。

RegExp 对象

标准的正则表达式对象,比较常用2个方法,大概只会在需要建立"动态"正则的时候才会创建(有这需要的时候,自然会想到)

方法描述
exec(string) 标准执行方法,包含分组对象(换句话说不支持全局模式)
test(string) 检索字符串中指定的值。返回 true 或 false。

demo

这是jquery中的一些正则表达式,像core_rnotwhite,rtrim看看注释就能明白

core_pnum:/[+-]?(?:\d*\.")\d+(?:[eE][+-]?\d+|)/.source注释写的很清楚,是用来表示任意数字的(包括正负,小数以及科学计数),source用来表示正则的语法内容(不带//),toString表示描述信息(正则标示符//内加上语法内容),这里看到source就应该清楚,下面绝逼是要使用RegExp创建正则去使用

第二部分有个(?:\d*\.")中的|,有量词+的意思,如果没有|,则整个数字不许包含小数点我们将(?:)全部去掉,并在我们分的四个部分上加入(),可以看到

除了第一个数组为我们需要的数组外,后面的就是所谓的分组,在做测试的时候也是超方便的存在,如果存在(?:)这种标志出现,基本可以确定在下面的使用中,移动会用到字数组(而且很可能每个都要用上,不用的都?:了)

 

rquickExpr:/^(?:(<[\w\W]+>)[^>]*"#([\w-]*))$/

判断是否为标签之间创建或为id查询的方式,可以看到这里的开头必须是<或者#,有时候对于$("   <div>")也是可以创建的,因为他们使用的正则是

 

rsingleTag: /^<(\w+)\s*\/?>(?:<\/\1>")$/

一个正确切严谨的标签的的收尾标签应该一致,所以使用了\1,代表匹配到的(\w+),可以发现诸如"<div /></div>"也是允许的

 

JsonExp

json正则的判断,小麻烦,略

 

瞎bb

  描述字符模式的正则表达式作为一种比较规范的语法,学起来还算简单,只要了解了分组,基本上javascript上的正则就已经没什么难度了



标签: 标签 遍历