首先声明,大部分的内容摘抄自大神http://javascript.ruanyifeng.com/ 中关于正则的内容,外加上一些简单的个人观点及举例,如有侵权,请指出,谢谢。

 

一、正则对象的属性方法
(1)test()方法,返回一个布尔值,判断字符串中是否有正则中的字符
var regex=/x/;
var str="xyz";
console.log(regex.test(str)); // 输出结果为true
var regex=/xx/;
var str="xyz";
console.log(regex.test(str)); // 输出结果为false
 判断必须完全符合正则中的规则,才会返还true,否则为false。


(2)exec() 正则对象的exec方法,可以返回匹配结果。如果发现匹配,就返回一个数 组,每个匹配成功的子字符串,就是数组成员,否则返回null。

    var regex=/x/;

    var str="x,x";

    console.log(regex.exec(str)); // ["x", index: 0, input: "x,x"] 输出结果为一个数组,数组内有其元素,及index和input两个属性,input:整个原字符串。 index:整个模式匹配成功的开始位置(从0开始)

(3)lastIndex : 表示正则对象从第几个字符开始匹配,可以通过regex.lastIndex=2; 设置举例
var regex=/x/g;
regex.lastIndex=2;
var str="x,xzxczxadasdasddd";
console.log(regex.exec(str)); //["x", index: 2, input: "x,xzxczxadasdasddd"] 如果没有 regex.lastIndex=2; 则此条应为Index属性为0
console.log(regex.exec(str)); // ["x", index: 4, input: "x,xzxczxadasdasddd"]

 

以上方法均为正则调用字符串

二、字符串对象的方法

(1)match ()字符串对象的match方法对字符串进行正则匹配,返回匹配结果。
var str1="abccbc";
var regex1=/a/;
var regex2=/1/;

console.log(str1.match(regex1)); //["a", index: 0, input: "abccbc"]
console.log(str1.match(regex2)); //null

需特别注意,无论是在正则后加全局g还是lastIndex 都无法影响match的结果,这点和exec()方法不一样。


(2)search () 字符串对象search 返回满足正则的第一个元素的索引位置,(位置从0开始);

var str1="dddabccbc";
var regex1=/a/;

console.log(str1.search(regex1)); // 输出结果为3

需特别注意,该方法一样不受g修饰符和lastIndex的影响

(3)replace 用来搜索并替换字符串中的内容,有两个参数,第一个参数是搜索要替换的数值,第二个是用来替换的的值
var str1="dddabccbc";
var regex1=/a/;

console.log(str1.replace(/a/,"c")); //输出结果为dddcbccbc ,替换了第一个a的值,
注意,replace方法会受到修饰符g的影响,如果在正则内加了g后,意思为替换字符串内所有正则内的内容。

var str1="dddabaabc";
var regex1=/a/;

console.log(str1.replace(/a/g,"c")); //输出结果为dddcbccbc 替换了全部的a为c


(4)split : 同字符串中的split方法。

三、匹配规则

(1)点字符 /./ 代表除了回车\r 换行\n 行分隔符\u2028 段分割符 \u2029以外的任何字符
举例
var str1="aXc";
var reg=/a.c/;

console.log(reg.test(str1));// 结果为true 在例子中.字符就代表了X

var str2="a\nc";
console.log(reg.test(str2)); 结果为false,.字符替代不了\n

(2) 位置字符: 位置字符主要有两个 第一个是^ 代表开头 一个是$ 代表以什么结尾分别举例
var str1="aXdssac";
var reg1=/^a/; //代表以a为开始
var reg2=/sac$/; //代表以sac结尾

console.log(reg1.test(str1));// 结果为true
console.log(reg2.test(str1));// 结果为true

(3) 竖线符号| 可以理解成 或(or) 的关系

举例:
var str1="aXdssac";
var reg=/ss|123/; // 有ss或者123
console.log(reg.test(str1));// 因为是或的关系,有一为真,既为真,所以结果为true;

(4)重复类{}: 表示连续重复的次数,注意,{}当中可以有一个参数,也可以有一个参数加上一个,以及两个参数三种方式
举例
1、
var str1="aXdsssac";
var reg=/s{1}/; //代表s恰好重复1次==/ss/
console.log(reg.test(str1)); // 所以结果为true;
2、
var str1="aXdsssac";
var reg=/s{2,}/; //代表s至少重复2次,可以为2次到无数次,
console.log(reg.test(str1)); //结果为true
3、
var str1="aXdsssac";
var reg=/s{3,6}/; //代表s循环3到6次
console.log(reg.test(str1)); //结果为true

(5)量词类: 量词类用于设定某个模式出现的次数,具体分为三种符号
? 表示出现0次到1次 等同于{0,1}
* 表示出现0次或多次,等同于{0,}
+ 表示出现1次或多次,等同{1,}
因和上面的重复类相似,就不再单独举例说明

(6) 贪婪模式: 在量词类中,默认情况下都是最大匹配,什么是最大匹配呢?就是一直匹配到不再符合条件为止,这种模式被称为贪婪模式。举例说明


var str1="Xdsssc";
var reg=/a*c/;
console.log(reg.test(str1)); //true
console.log(str1.match(reg)); //返回c


var str1="Xdaasssc";
var reg=/a+/;
console.log(reg.test(str1)); //true
console.log(str1.match(reg)); //因为贪婪模式,所以返回值为aa 

特别注意,如果想要中止贪婪模式,只需要在*或者+ 后面添加?即可取消贪婪模式,而且特别注意,任何正则在单独添加*或者?时,其返回的结果都为true(因为可以是0次,待测试)

(7) 字符类:
字符类代表有一系列的字符可以选择,只要满足其中某一个即可 其书写规范为/[xyz]/ 特别注意它和/xyz/的区别,前者代表 x,y,z中任意一个元素即可,而后者则代表xyz这个整体字符


/[abc]/.test('hello world') // false /[abc]/.test('apple') // true


(8) 脱字符: 脱字符是和字符类配合使用,一般增加在字符类的前边,代表除了字符类的字符外,其他的都可以匹配,格式为/[^xyz]/ 代表除了x.y.z外的所有字符都能进行匹配。

特别注意[^] 代表任意字符!


(9) 连字符 - 书写格式/[a-z]/ 代表从a到z 特别注意,如果连字符- 没出现在[]中时,则仅代表其本身的意思还有/[1-42]/ 代表的1-4。而不是1-42,特别注意!


(10)转义符 :正则表达式中那些有特殊含义的字符,如果要匹配它们本身,就需要在它 们前面要加上反斜杠。比如要匹配加号,就要写成\\+ 。正则模式中,需要用斜杠转义的,

一共有12个字符:^、.、[、$、(、)、 |、*、+、?、{和\\。需要特别注意的是,如果使用RegExp方法生成正则 对象,转义需要使用两个斜杠,因为字符串内部会先转义一次。

举例:
(new RegExp('1\+1')).test('1+1') // false
(new RegExp('1\\+1')).test('1+1') // true

(11)修饰符 : 修饰符代表的额外的规则,前面我们用到的//g 就是一种修饰符
g:默认情况下,第一次匹配成功后,正则对象就停止向下匹配了。g修饰符 表示全局匹配(global),加上它以后,正则对象将匹配全部符合条件的 结果,主要用于搜索和替换。
i:默认情况下,正则对象区分字母的大小写,加上i修饰符以后表示忽略大 小写(ignorecase)。

(12)预定义模式 : 预定义模式指的是某些常见模式的简写方式。
\d 匹配0-9之间的任一数字,相当于[0-9]。
\D 匹配所有0-9以外的字符,相当于[^0-9]。
\w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_].
\W 除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_].
\s 匹配空格(包括制表符、空格符、断行符等),相等于[\t\r\n\v\f].
\S 匹配非空格的字符,相当于[^\t\r\n\v\f]
\b 匹配词的边界.
\B 匹配非词边界,即在词的内部

(13)组匹配:正则表达式中的()代表组,每一个()代表一个组,举例
/abc+/ 代表的是a,b 以及至少一个c
/(abc)+/ 代表至少一个abc,此时的abc为一个整体,这种模式就叫组匹配。

posted on 2016-06-17 09:23  鱼鱼疯  阅读(287)  评论(0编辑  收藏  举报