180328 正则表达式

什么是正则表达式

检索文本时,可以对字符串内容进行模式匹配。RegExp 就是这种模式。用RegExp对象表示正则表达式。


创建正则表达式

  • 直接量定义
/pattern/attributes
var regExp = /abc/;

//可以添加修饰符,可以同时使用

/abc/g  全局匹配,查找所有匹配
/abc/i  大小写不敏感
/abc/m  执行多行匹配
  • 构造函数创建对象
new RegExp(pattern, attributes);
var regExp = new RegExp('abc','gi');

var regExp1 = new RegExp(regExp); 
//通过new创建的对象和参照对象是两个不同的对象,可以通过给一个对象增加属性验证。
//如果 pattern 是正则表达式,而不是字符串,则必须省略修饰符参数。

var regExp2 = RegExp(regExp);
//不使用new关键字,新创建对象和原对象是同一个。
  • 区别
var regExp = /\w/g;   // \w 中包含下划线

var regExp1 = new RegExp('\\w','gi'); // 在字符串中会转义

返回值

如果参数 pattern 是正则表达式而不是字符串,创建一个新的 RegExp 对象,模式与标志与指定、参照的对象相同。

如果不用 new 运算符,则 RegExp() 作为函数调用,那么它的行为与用 new 运算符调用时一样,只是当 pattern 是正则表达式时,它只返回 pattern


RegExp对象的方法

1:RegExp.test() : 检索字符串中的指定值。返回值是 true 或 false。

var patt1=new RegExp("e");

document.write(patt1.test("The best things in life are free")); 

// true

2:RegExp.exec() : 检索字符串中的指定值。返回值是数组。如果没有发现匹配,则返回 null。

var patt1=new RegExp("e");

document.write(patt1.exec("The best things in life are free")); 

// e

如果需要找到所有某个字符的所有存在,可以使用 “g” 参数,exec() 的工作原理如下:

  • 找到第一个 “e”,并存储其位置 [ lastIndex ]
  • 如果再次运行 exec(),则从存储的位置开始检索,并找到下一个 “e”,并存储其位置
var patt1=new RegExp("e","g");
do
{
result=patt1.exec("The best things in life are free");
document.write(result);
}
while (result!=null) 

// eeeeeenull  每次循环落下一个结果
var str = "Hello World! Hello W3School!";
        var patt1 = /\w+/g;
        do {
            result = patt1.exec(str);
            console.log(result);
        } while (result != null)

这里写图片描述

var str = "Hello World! Hello W3School!";
        var patt1 = /\w+?/g;
        do {
            result = patt1.exec(str);
            console.log(result);
        } while (result != null)

这里写图片描述

string.match(regExp) : 返回数组
string.replace():将正则表达式匹配出的字符替换成目标字符

var regExp = /bb/gm;
var str = 'aabbbcc';
str.replace(regExp,'cc');  

-----------------------------------------------
var regExp = /(\w{4})(\w{4})/gm;   玩子表达式:反向引用
var str = 'aaaabbbb';
str.replace(regExp,'$2$1');     替换子表达式位置

str.replace(regExp,function($,$1,$2){
    return $2 + $1;
})
-----------------------------------------------
var regExp = /(\w{4})(\w{4})/gm;
var str = 'aaaabbbbd';
str.replace(regExp,function(){
    return 'c'
})                            //cd

-----------------------------------------------
var regExp = /-(\w)/g;
var str = 'your-first-name';
str.replace(regExp,function($,$1){
    return $1.toUpperCase();
})
-----------------------------------------------
str = 'aaaabbbbccccdddd';
var regExp = /((\w{4})(\w{4}))/g;     [aaaabbbb,ccccdddd]
var regExp = /^((\w{4})(\w{4}))/g;    [aaaabbbb] 以其开头

-----------------------------------------------
有几个括号就有几个子表达式。

regExp = /(?:()())/g;    忽略掉外层表达式
-----------------------------------------------
str = aabb;
regExp = /((\w{2})(\w{2})\1\2)/g;
子表达式1:aabb
2:aa
3:bb
aabb[前面匹配的结果]aabb[\1]aa[\2]
str = 'aaaabbbbccccdddd';
var regExp = /((\w{4})(\w{4}))/g;
regExp.exec(str);
第一位匹配元素,子表达式1,字表达式2
str = '100000000000'
var regExp = /(?=(\d{3})+$)/g;
str.replace(regExp,'.');

这里写图片描述


这里写图片描述

这里写图片描述

  • ( . )
    这里写图片描述
  • (\w)
    单词字符包括:a-z、A-Z、0-9,以及下划线。不包含汉字。
    这里写图片描述
  • (\W)
    这里写图片描述
  • (\s)
    空白字符可以是:
    空格符 (space character)
    制表符 (tab character)
    回车符 (carriage return character)
    换行符 (new line character)
    垂直换行符 (vertical tab character)
    换页符 (form feed character)
    这里写图片描述
  • (\b)
    通常用于查找位於单词的开头或结尾的匹配
    匹配的单词边界的长度为零。(不要与 [\b] 混淆。)
    这里写图片描述
/\bm/ 匹配 "moon" 中的 'm'/oo\b/ 不匹配 "moon" 中的 'oo',因为 'oo' 后面的 'n' 是一个单词字符;

/oon\b/ 匹配 "moon" 中的 'oon',因为 'oon' 位于字符串的末端,后面没有单词字符;

/\w\b\w/ 不匹配任何字符,因为单词字符之后绝不会同时紧跟着非单词字符和单词字符。
  • (\B)
    通常用于查找不处在单词的开头或结尾的匹配
    匹配位置的上一个和下一个字符的类型是相同的:即必须同时是单词,或必须同时是非单词字符。字符串的开头和结尾处被视为非单词字符。
    这里写图片描述

这里写图片描述

  1. (+)
    这里写图片描述
  2. (*)
    可以用于检索两个以上,附加作用
    这里写图片描述
  3. (?)
    这里写图片描述
  4. ({X})
    这里写图片描述
  5. ({X,Y})
    这里写图片描述
  6. ({X,})
    这里写图片描述
  7. ($)
    这里写图片描述
  8. (^)
    这里写图片描述
  9. (?=)
    这里写图片描述
  10. (?!)
    这里写图片描述

实例

/abc/               匹配字符串整体
/[abc]/             匹配满足范围里的任意一个字符
/[^123]/            ^ 在[]才是非的意思
/[A-Z0-9]/          匹配满足范围里的任意一个字符
/[A-z][0-9]/        匹配两个字符:分别满足各自范围要求
/(red|blue|green)/  匹配其中任何一个
/[\w\W]/            相当于匹配全部字符,任选其一

/aa/        [aa]
/aa/g       [aa,aa,aa]
/(aa)/    
/(aa)+/     [aaaa]
/aa+/       [aaaaa]

/a{2,4}/    [aa,aa]   贪心匹配原则
/a{2,4}?/   [aaaa]    非贪心匹配
/a+?/       [a,a,a,a]
/a*?/       [ , , , , ]

/(\w)(\w)\1/  反向引用,当第一个任意字母匹配后,第三位同步第一位
// 已经匹配成功的字符不会重复匹配

/is(?=all)/  正向预查

/^a/gm       str = 'andfsde\nabiu'   [a,a]
/^a/g        [a]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章