正则表达式

 

1什么是正则表达式,创建正则的两种方法

正则表达式是一个描述字符模式的一个对象,正则表达式用RegExp对象表示。

正则表单式创建方式有两种:1、直接量   2、使用RegExp来创建正则对象。  用

var person=/\w/g;
var person1=new RegExp("\\w")


一般如果正则表达式是变量的,通常使用第二种方式,第一个参数是正则表达式,第二个是模式匹配符包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。

var str='mm'+1;
var reg=new RegExp(str,'g');
reg.test('mm1');

2.正则表达式的元字符和量词

元字符 描述
. 除了换行符和其他unicode之外的所有字符
\w 等价于[a-zA-Z0-9]
\W 等价于[^a-zA-z0-9]
[....] 在方括号内的任意字符
[^...] 不在方括号内的任意字符
\s 任何空白字符
\S 任何非unicode字符外的字符
\d 等价于[0-9]
\D 等价于[^0-9]
匹配前面的0次或者1次,等价于{0,1}
+ 匹配前面的一次或者多次,等价于{1,}
* 匹配前面的多次或者0次,等价于{0,}
{n,m} 匹配前面的n次到m次
{n} 匹配n次
{n,} 匹配前面的n次或者更多次
^ 匹配字符串的开头
$ 匹配字符串的结尾
\b 匹配字符串的边界
\B 匹配非边界
 ?  在量词后面加一个?表示非贪婪匹配,尽可能少的匹配

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  在正则中还有许多标点符号有特殊的意义,他们是:

^ $  .  * + ? = ! : | \ / ()  []  {}
如果想在正则表达式中使用他们的直接量,那么要用\斜杠进行转义,例如 var reg=/\\/g   这个匹配的是一个‘\';

2.2 贪婪与非贪婪模式

贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。非贪婪模式只被部分NFA引擎所支持。 

属于贪婪模式的量词,也叫做匹配优先量词,包括: 

“{m,n}”、“{m,}”、“?”、“*”和“+”。 

在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括: 

“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。 

从正则语法的角度来讲,被匹配优先量词修饰的子表达式使用的就是贪婪模式,如“(Expression)+”;被忽略优先量词修饰的子表达式使用的就是非贪婪模式,如“(Expression)+?”。 
2.3  选择和分组引用和正向匹配
字符
含义
|
匹配该字符串左侧子表达式或者右侧子表达式
()
将几个项组合成一个单元,这个单元可以用*+?修饰,并且记住这个单元,以供后面引用
(?:....)
只组合但是不记忆这个分组
\n
和第n个分组第一次匹配的字符相匹配,分组是圆括号中的子表达式,从左到右的第几个表达式。
(?=p)
 要求接下来的字符都于p匹配
(?!p)
 要求接下来的字符都不能于p匹配。
 
 
 
 
 
 
 

 

3 正则的方法
3.1 exec()  exec返回一个数组,数组的第一个元素是整体匹配到的字符,第二个是子表达式相匹配的文本。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。

3.2 test()
返回一个布尔值,true或者false 如果加了g,那么没操作一次,lastIndex就往后移动;
 
4 用以匹配正则的字符串的方法
4.1 search()
serach的参数是一个正则的表达式,返回第一个与之匹配的子串的位置,如果找不到返回-1,如果给的参数不是正则,那么会使用RegExp()初始化成一个正则表达式.
   alert("javascript".search(/script/g));//返回4
   alert("javascript".search(/css/g));//返回-1
4.2 replace()
replace的第一个参数是正则表达式,或者普通的字符,第二个是要替换成的字符,或者fuction,或者$n 如果不加g,查找到第一个匹配的字符替换后就不进行替换了,否则将替换所有匹配的字符。
  "javascript,css,html".replace(/javascript/g,"java");//java,css,html
  "css,c#,c++,html".replace(/(css),c#/,"$1"); //css,c++,html
下面replace的第二个参数是一个方法,这个方法有三个参数,第一个是要替换的字符串,第二个是要替换的字符串的索引值,第三个是原有的字符串,这个方法必须有return返回值,用返回值来替换要替换的字符串,replace方法不会改变原有字符串; 


4.3 match()
match()里面是一个正则表达式,如果加上g,则全局查找,返回的是匹配到的数组,如果不加g,找到第一个就不继续查找,返回的是一个数组,数组的第一个元素是匹配到的整体字符串,第二个元素是子元素。
var str='eng1eem2mfefn3';
str.match(/\w(\d)/)
["g1", "1"]
var str='eng1eem2mfefn3';
str.match(/\w(\d)/g)
["g1", "m2", "n3"]

 4.4 split()

split参数可以是正则,用以将字符串分割成一个数组。
posted @ 2016-05-04 18:35  老张家阿妞  阅读(191)  评论(0编辑  收藏  举报