Lyrics


< More and better />


JS 正则表达式

正则表达式的 RegExp 实例方法

1. 创建方法
  1. 使用 new 操作符来创建

var box =RegExp("Box") 创建一个正则变量 模式字符串: Box
alert(box); 显示 /Box/ 显示是字面量的表示法

  1. 使用字面量的方法来创建
    var Box = /Box/; / 模式字符串 / 反斜杠是字面量表示的方法

    2. 正则表达式的匹配模式
    1. g 表示全局模式,应用于所有的字符串,不会再发现第一个匹配项后就停止

    2. i 不区分大小写

    3. m 多行模式, 会换行进行查找

    3. RegExp 的测试方法
    1. texst() 方法

如果所查找字符中 存在 相对应的模式字符串 返回 true 反之 返回false

var box = /Box/g;
var str= "I dont't know this box";
alert(box.test(str)); 会弹出 false

var box = /Box/gi;
var str= "I dont't know this box";
alert(box.test(str)); 会弹出 true

  1. exec( ) 方法

依据相应的匹配模式 返回 包含 第一个 匹配想信息的数组 ,返回的数组是Array的实例,(typeof 是 object) 包含两个而外的属性 : index 和 input
index 表示匹配项在字符串中出现的位置 , input 表示应用正则表达式的字符串( );

var box = /Box/gi;
var str= "I dont't know this box";
alert(box.exec(str)); 会弹出 box
typeof(box.exec(str)) 查找到 是Array 反之是 null;

  1. 使用字符串的匹配方法
  1. match() 以数组类型返回匹配成功的字符

    var pattern = /box/gi;
    var str= "I dont't box know this box";
    alert(str.match(pattern); 返回box,box 数组,但是如果匹配模式 没有 g 则只会返回 box 就只会返回第一个匹配而数组,不会全部返回

  2. search() 返回第一个匹配成功的字符的位置 (不用全局匹配模式 g 只会返回第一个位置)

  3. replace( ) 替换相匹配的字符 (g 则全部被替换 无 g 则只会替换第一个匹配的字符串)
    两个参数,第一个是匹配的正则变量,第二个是所被替换后的字符串;

4.split() 拆分字符串为数组
以数组的方式返回
var pattern = / /gi;
var str= "I dont't box know this box";
alert(str.split(pattern);

RegExp 对象的静态属性 (直接使用,无需声明)

1. 静态属性的使用

兼容性不太好 一般不使用

str
1
2
3
4
5
6
7
8
var pattern = /box/gi;
pattern.test(str); 或者 pattern.exec(); 静态的属性必须执行
alert(RegExp.input) 显示“I dont't box know this box” * input :当前被匹配的字符串 *
alert(RegExp.leftContext) 显示 "I dont't box know this “ * leftContext:最后一次匹配的前子串 *
alert(RegExp.rightContext) 因为最后一次匹配的后面没有字符串,所以为空, * rightContext :左后一次匹配的后子串 *
alert(RegExp.lastMatch); 显示 box * lastMatch:最后一个匹配的字符串 *
alert(RegExp.lastParen); 显示 空 (没有圆括号) * lastParen : 最后一对圆括号内的匹配字符串 *
alert(RegExp.multiline) 显示 false * multiline : 是否支持多行的表达式的 Boolean *

2. 正则表达式的字符匹配


所有的字符匹配 类似于 用一个匹配的字符去代替某个字符还有就是符合匹配的位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var pattern=/g.ole/;
var str="goole";
alert(pattern.test(str)); true
var pattern=/go\sle/;
var str="goole";
alert(pattern.test(str));
var pattern=/goole{4,8}/;
var str="gooleeee";
alert(pattern.test(str)); e在被匹配的字符号中出现4~8次 才是正确的
var pattern=/(google){4,8}/;
var str="googlegooglegooglegoogle";
alert(pattern.test(str)); google在被匹配的字符号中出现4~8次 才是正确的
var pattern=/g(.*)k/; * (.*) * 表示g 和 k 之间的匹配 字符 (和Python抓包一样)
var str="gllllllllk";
alert(pattern.test(str)); true
alert(RegExp.$1) RegExp.$1 表示g 和 k 之间的匹配 字符 "llllllll"
var pattern=/g(.*)k(.*)L/;
var str="gllllllllkoooooL";
alert(pattern.test(str));
alert(RegExp.$1) ;
alert(RegExp.$2)

使用 RegExp 方法 要先运行一下 pattern.test(str) 或 pattern.exec(str))
$1,$2 , $3 依次表示 匹配的字符


贪婪模式最常见的是 (.*)

var pattern=/g(.*)k/;
var str="gllllllllk gllllllllk gllllllllk gllllllllk ";

如果使用 replace 则产生的效果是 将g 和 k 之间的所有匹配项进行替换,即使匹配模式没有指定是全局模式 。

结束贪婪模式 最好的方法是 (.*?) 这样匹配只会匹配第一项(没有指定是全局模式)

还有一种 惰性 方法是 :var pattern=/g([^g]*)k/g;
var str="gllllllllk gllllllllk gllllllllk gllllllllk ";
使用去掉 . 用 [^g] 来限制对 g 的匹配 出现 g 就不匹配


扩展链接
js-正则表达式详解 - 简书
Js 简书 精华
JS使用方法大全 - 简书
正则表达式 基础到深入–进阶一,如何实现最近匹配?